X



Win32API質問箱 Build123©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
垢版 |
2016/10/08(土) 12:33:02.29ID:0jaJMPXG
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
0626デフォルトの名無しさん
垢版 |
2017/05/21(日) 11:10:23.22ID:Bmvuj1qA
GlobalAllocの戻り値のハンドルを直接キャストしてポインタに代入したら駄目だろ
ハンドルを引数としてGlobalLockを呼び出して、その戻り値をキャストしてポインタに代入しろ
0628 ◆QZaw55cn4c
垢版 |
2017/05/21(日) 11:29:51.82ID:pUWFtSb1
p = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
HeapFree(GetProcessHeap(), 0, p);
でうまくやってるよ,GlobalAlloc は win3.1 の仕様を下敷きにしているので使いにくいよ
0631デフォルトの名無しさん
垢版 |
2017/05/21(日) 16:25:59.44ID:qIzrXw0L
>>625
関数の仕様ぐらい確認しろといいたい
https://msdn.microsoft.com/ja-jp/library/cc430065.aspx
GMEM_FIXEDを指定していないGlobalAllocはメモリハンドルを返す
アドレスではなくハンドルであり、このハンドルをGlobalLockに渡すことでメモリアドレスを取得できる

メイン処理
DWORD count=0;
HGLOBAL gm = GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(gm,&count);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
for(i=0 ;i<count;i++){
LPTSTR name= ((PRINTER_INFO_1*)pStructA)[i].pName;
}
〜〜〜
DWORD GetPrinterInfo(HGLOBAL gm, LPDWORD count){
DWORD dwSize;
DWORD result=0;
DWORD pNeeded=0;
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,0,&pNeeded,count);
Global ReAlloc(gm,pNeeded,GHND);
dwSize = GlobalSize(gm);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,dwSize,&pNeeded,count);
GlobalUnlock(gm);
return result;
}
0632デフォルトの名無しさん
垢版 |
2017/05/21(日) 16:40:14.23ID:s+TjotGN
GMEM_MOVEABLE
移動可能メモリを割り当てます。Win32 環境では、物理メモリ内でメモリブロックが移動されることは決してありませんが、既定のヒープ内で移動することは可能です。
戻り値は、メモリオブジェクトのハンドルです。このハンドルをポインタへ変換するには、GlobalLock 関数を使います。
この値を GMEM_FIXED フラグと組み合わせることはできません。

Win32では移動することがないあるよって言ってるし、GPTRフラグを使うか、メモリ確保をmallocなりに置き換えたほうが良いね
EnumPrintersに渡すバッファのポインタは別になんでも良いみたいだし
0634デフォルトの名無しさん
垢版 |
2017/05/21(日) 18:27:54.67ID:8+aEBKAw
こうゆう奴がプロジェクトにいると、デバックでは動くがリリースでは動かない
プログラムとか出来上がるんだろうな。。。

(もちろん、リリース+デバック情報埋込なら動く最悪のパターン)
0636デフォルトの名無しさん
垢版 |
2017/05/22(月) 07:02:35.87ID:1fjxccfj
sizeof(0) ...
0637デフォルトの名無しさん
垢版 |
2017/05/22(月) 10:58:01.86ID:ZhEHdQZR
みなさま本当にありがとうございました。
メモリ確保の方法に関しては古いのはなんとなくわかってるのですが、意見できる程知識がないのが実情です……
ともあれ解決方法の兆しが見えたので頑張ってみます。

>>634
耳が痛いですが自分も本当にそう思います……個人的には勉強になるのでいいんですが……
リリース気をつけておきます
0640デフォルトの名無しさん
垢版 |
2017/05/27(土) 10:39:23.30ID:I7pwMhhb
皆さんは、ダイアログの HWND に対し SetWindowLongPtr, GetWindowLongPtr を使用する場合
GWLP_USERDATA と DWLP_USER をどのように使い分けていますか?
0642デフォルトの名無しさん
垢版 |
2017/06/14(水) 11:22:26.39ID:+7k/9HY0
エディットボックスにES_MULTILINEを付けると
Ctrl+Aですべて選択ができなくなってしまうのだけど、
これはなにか技術的な理由があってのことですか?
それとも、昔から修正されていないだけのバグですか?
0643デフォルトの名無しさん
垢版 |
2017/06/14(水) 11:39:15.66ID:+7k/9HY0
642の追記ですが、ES_MULTILINEだけでなく、ES_READONLYを付けたときも、
同じようにCtrl+Aが効かなくなるようです。
0645デフォルトの名無しさん
垢版 |
2017/06/14(水) 12:19:57.15ID:+7k/9HY0
>>644
つまり、ES_MULTILINEやES_READONLYはCtrl+Aに対応すべき状態ではない
というような技術的な理由があるわけではなく、
単にマイクロソフトが修正していない昔からのバグで、
サブクラス化などで対応しても問題ないものなんですよね?
0647デフォルトの名無しさん
垢版 |
2017/06/14(水) 19:35:40.93ID:+7k/9HY0
>>646
エディットボックスが常にCtrl+Aを扱っていないなら納得するんですが、
ES_MULTILINEやES_READONLYが付いているときだけ効かなくなるんです。
0648デフォルトの名無しさん
垢版 |
2017/06/15(木) 10:24:59.35ID:0e975zeL
>>647
挙動としては認識通り
技術的な問題ではないのでサブクラスなりインスタンスなりのKeyDownイベントでSelectAll()して構わない
普通はついでにCopy()やCut()のショートカットキー処理もつけておく
0649デフォルトの名無しさん
垢版 |
2017/06/15(木) 11:09:41.39ID:pFacwd6b
>>648
解説ありがとうございます。
エディットボックスの処理を信じずに、Ctrl+Aなどの動作を載せてしまいます。
0650デフォルトの名無しさん
垢版 |
2017/06/23(金) 01:36:52.51ID:/7Z8Xk53
CLIP STUDIO PAINTのようにツールっぽくする為にウインドウ全体を茶色に統一するようなWin32APIと言うのがありますでしょうか?
SKINかもしれないのですがSKINの仕方が解りません。

それとMediBang Paint Proのようにウインドウ全体でなくメニューとツールウインドウだけを茶色に統一する方法も
解りましたらお願いします。
0652デフォルトの名無しさん
垢版 |
2017/06/23(金) 10:30:01.91ID:0OdP20aK
中学生でもランサム作ってるんだから
がんがれ
0653デフォルトの名無しさん
垢版 |
2017/06/24(土) 05:45:55.83ID:AiSsJYjg
>>652
ランサムだけなら誰でもできる。ランサムウェアと呼ぶから重要なことが抜けて伝わってしまう。
0655デフォルトの名無しさん
垢版 |
2017/06/24(土) 12:44:27.58ID:TJcGM6+6
警察は実績が欲しく、子供は有名になりたかったらしいので
両者の思惑が一致した最高の形なんだろう
0656デフォルトの名無しさん
垢版 |
2017/06/24(土) 18:30:11.33ID:AiSsJYjg
>>654
重要なのはWindowsの穴をついてプログラムを実行できたところだからね。
0657デフォルトの名無しさん
垢版 |
2017/06/24(土) 18:34:45.55ID:xexj0oOj
穴ついてたのかよw
どうせこのbat実行してね、だろうと思ってたんだが違ったか
0665デフォルトの名無しさん
垢版 |
2017/06/25(日) 16:33:39.46ID:WhQ0StjH
バッチファイルを書き換えられると危険が危ないと書いてある
朝日新聞の記事を読んだだけなのでよくわからないけど、
暗号化するプログラムをコピペで作ったんでしょう?
暗号化するバッチをコピペで作っただけなの?

どっちにせよ、穴は使ってない、ただのオナニーだった感じなんだが。
0666デフォルトの名無しさん
垢版 |
2017/06/25(日) 17:24:22.61ID:wnVI7vr5
>>665
じゃあどうやってファイルを書き換えたんだよ?
0668デフォルトの名無しさん
垢版 |
2017/06/25(日) 17:35:36.22ID:wnVI7vr5
ランサムウェアよりも前に穴をつくマルウェアが出てきて、そのマルウェアを参考にしたのが、今回のランサムウェアだと思うが。
0670デフォルトの名無しさん
垢版 |
2017/06/25(日) 18:17:51.52ID:gomAIGS/
nimda
0673デフォルトの名無しさん
垢版 |
2017/06/25(日) 22:03:09.80ID:mrQK8XKT
いい加減にしろよ
引っ込みつかなくなった奴のマウント取って喜ぶような
小学生並みの神経してんのかお前は
0677デフォルトの名無しさん
垢版 |
2017/06/25(日) 23:21:44.20ID:43L7ow5i
>>675
visual style、runa style...いわゆる ThemeAPI の話?
なら、いわゆるスキンの類だと思うので API とか GDI とかの階層の話じゃないと思う。

カスタマイズでどうにかって話になるか、
ttps://www.japan-secure.com/entry/how_to_customize_the_windows_10_to_windows_xp.html

XP から theme.dll をぶっこ抜き・・・うーんワスレタ
0679デフォルトの名無しさん
垢版 |
2017/06/26(月) 12:35:00.28ID:H+izVTcm
XP風は好きじゃないので
2000風にしたいな
0681デフォルトの名無しさん
垢版 |
2017/06/27(火) 16:01:04.05ID:SkJ0mgKG
>>675
GDIのAPI自体は変わってないと思うんだけど
Direct3Dを通さないで描画するとかならもう無理じゃね
0684デフォルトの名無しさん
垢版 |
2017/06/27(火) 22:00:01.81ID:EYZSSY+5
OS全体ならXP時代によくやってたtheme.dllの差し替えでいける・・・はずなんだが
XP時代でしか通用しない技なのかも知れんね
0692デフォルトの名無しさん
垢版 |
2017/06/28(水) 14:01:52.20ID:MYEGHP5e
GDI 描画と言えば FillRect とかの、HDC 用いるグラフィック描画で、
Windows 10 でも Windows 3.1 でも基本的に動作同じだよね。
0696デフォルトの名無しさん
垢版 |
2017/06/28(水) 14:27:13.10ID:NYSM+Urs
ウィンドウシステムの動作は GDI では規定されていないだろ。
以上、異論は無視する。
0700デフォルトの名無しさん
垢版 |
2017/06/29(木) 05:23:51.54ID:RYKjplhO
dwm.exe というデスクトップマネージャーのプロセスがGUI描画の番人になってるからXP再現は無理でしょ。
0701デフォルトの名無しさん
垢版 |
2017/06/29(木) 06:47:05.22ID:LierOJHW
xpからファイル持ってきてosにぶちこむのができないからって
>>675ができないというわけじゃない
0706デフォルトの名無しさん
垢版 |
2017/07/01(土) 00:55:09.30ID:SrP9qrPF
Win10SDKにまだ手を出していないんだけど、ようするに
Platform SDK、Windows SDK と思っていいんだよね?
0709デフォルトの名無しさん
垢版 |
2017/07/03(月) 20:14:34.18ID:pLc9U1QI
const WCHAR *className = L"MainWindow";

static const WCHAR *className = L"MainWindow"; 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0710デフォルトの名無しさん
垢版 |
2017/07/03(月) 22:00:50.05ID:QZMxmlWX
>>708
WM_NCDESTROY だか WM_POSTNCDESTORY が来るまで
window のインスタンスを消しちゃいけなかったような

PostQuitMessage の前に DestroyWindow しておけば良かったような
0711デフォルトの名無しさん
垢版 |
2017/07/04(火) 00:24:40.83ID:UJlaPfcf
VS2017でそのままビルド実行してみたけど例外など発生せずに正常に終了した
何か条件とかあるのかね
0713デフォルトの名無しさん
垢版 |
2017/07/04(火) 02:04:52.19ID:XS8CaxP/
とはいえ、
「ウイルスバスターを利用されている場合はエラーが出ます」
ってわけにもいかないだろうからこの先面倒だね。
健闘をお祈りします。
0714デフォルトの名無しさん
垢版 |
2017/07/04(火) 02:37:05.07ID:48gcNEwZ
ウィルスバスター入れてても、その自作プログラム以外のソフトでは
そういう終了時に例外が出る問題は出ないんだよね?
とすると、そのプログラムが何かを踏んでるようにみえるけど
0716デフォルトの名無しさん
垢版 |
2017/07/05(水) 10:54:07.33ID:Qpg00Afa
>>708
>>710
while( GetMessage( &msg, NULL, 0, 0 ) < 0 )
じゃないのか
0718デフォルトの名無しさん
垢版 |
2017/07/06(木) 14:11:37.94ID:eR2pXU0u
ウイルスバスター側にしてみれば
DestroyWindow されてないのに SendMessage したら落ちたww
ということだろうな
0719デフォルトの名無しさん
垢版 |
2017/07/06(木) 19:13:43.60ID:Uj2/753t
>>712
static LRESULT CALLBACK proc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )

wc.lpfnWndProc = &proc;

これはどういうことかね、くわしく説明してもらおう
0720デフォルトの名無しさん
垢版 |
2017/07/09(日) 21:40:21.92ID:u50+Yb/E
Windows10タブレットで、画面の右端のメニュー(?)でディスプレイの明るさを変更できるじゃないですか。
あれをプログラムから変更できるようにしたいんですが、Win32APIで可能ですか?
0722720
垢版 |
2017/07/09(日) 22:58:40.50ID:u50+Yb/E
>>721
ありがとうございます!
む、難しいですか・・・。
頑張ってみます!
0723デフォルトの名無しさん
垢版 |
2017/07/11(火) 10:34:24.01ID:x+ezuj+Y
ソケット通信でUDPでrecv関数でデータ取ってるのですが
これrecvでデータを取る前に何バイト溜まってるか確認するAPIあったら教えてください
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況