[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 09/26 11:03 / Filesize : 81 KB / Number-of Response : 377
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build67



1 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:20:46 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-10くらい。

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

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build66
pc11.2ch.net/test/read.cgi/tech/1210775622/

327 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:25:42 ]
すげぇマジだ。
Windowsのプログラマは只者じゃねーな。

328 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:20:05 ]
スタートメニューやクイック起動からだと
Ctrl+クリック  バックグラウンドで起動 (メモ帳だけ?)
Shift+クリック メニューが勝手に消えない

Shift+クリックなんて知らなかった。これ結構便利だな。

329 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:01:57 ]
> Shift+クリック メニューが勝手に消えない

うおおおお
すげえ、これすげえ
感激した

330 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:03:29 ]
感激したので、これからは
WinMainのnCmdShow引数をまじめに処理しようと思う

331 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:55:21 ]
で、結局Ctrl押しながら起動でZオーダー最前面にする方法は誰も分からんのか、、、

332 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:03:25 ]
便利な機能を殺すのか。
ウィンドウハンドルをどうにか持って来れれば何とかならんか?

333 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:58:07 ]
メモ帳のソースコードが公開されていて改修できるなら可能だと思うが、
それが出来ないならちょっと思いつかないな。

334 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:09:26 ]
notepad.exeを改造すればいいじゃない
その程度のクラック知識も無い人はWin32APIで開発なんてやめた方がいいと思うよ

335 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:10:27 ]
STARTUPINFOに仕込んでてもダメかな…



336 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:15:25 ]
流出はしてたかもしれんなw

337 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:16:32 ]
別に変な事をしなくてもThreadIDから窓を列挙して前面に移動すればいいだけじゃないか

338 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:22:58 ]
実際にやってみれ
多分無理

339 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:27:54 ]
メモ帳限定でいいなら
CreateProcess→WaitForInputIdle→ウィンドウ列挙してプロセスIDから該当のメモ帳を探す
→AttachThreadInputでアクティブプロセスのコンテキストを割り当て→SetForegroundWindow
こうかな?

340 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:18:04 ]
メモ帳をフックすればいいだろ

341 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:31:43 ]
ソレダ!

342 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:34:47 ]
んー
Process32FirstとProcess32Nextを使ってNotePad.exeと親のプロセスIDとを取得。
AttachThreadInputでアタッチして制御をもらって、終わったらデタッチ。

ただ、NotePad.exeのウインドウハンドルはどうやって取得するんだろう。
それが出来ればSetActiveWindowなりSetForegroundWindowを呼べるんだが。

343 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:41:59 ]
CreateProcess したのに、わざわざそうやってプロセスID取得するの?
EnumWindows()とGetWindowThreadProcessId()を組み合わせて探すのが
バージョン依存しなくていいかも。

344 名前:343 mailto:sage [2008/06/17(火) 14:42:45 ]
下2行はプロセスIDからウィンドウハンドル探す方法ね。

345 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:53:06 ]
バージョン依存ってProcess32FirstがNT4で使えないとかそういう事かね?



346 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:57:07 ]
メモ帳側が変わるかということじゃね

347 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:19:45 ]
変わらねーよw

・タブ対応
・正規表現grep
・構文ハイライト
・ソース折り畳み
ぐらいは対応して欲しいけどな

348 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:33:24 ]
そんな高機能なメモ帳なんてメモ帳じゃないやい・゚・(つД`)・゚・

でも、Vistaのメモ帳ではCtrl+Gで行番号指定移動に対応していたりと
結構侮れなかったりもする。

349 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:36:52 ]
メモ帳はタブ幅を4に変更可能にしてくれればもう何も言うことはない

350 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:45:13 ]
comctl32を設計した馬鹿をひっぱたきたい。

351 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:54:15 ]
メモ帳に関連づけてるファイルがなくて試せない俺は負け組

352 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:57:05 ]
>>350
つうほうしまたし

353 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:18:29 ]
メモ帳というかEditコントロールが貧弱すぎ。
無制限UNDO/REDOやドラッグドロップぐらい標準で対応しろと。
マウス乗せたらボワっと色が変わるようなくだらん機能つけるぐらいなら基本機能を充実させろと。

354 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:22:41 ]
そんなもの標準でつけられても、結局は込み入ったことするには不足で、自前で実装することになるのが目に見えてる。

355 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:31:19 ]
SetWindowHookEx で、WH_MOUSE を指定し、プライマリスレッドへのローカルフックを
設定しているのですが、MOUSEHOOKSTRUCT.dwExtraInfoは常に0になります。
XBUTTONの番号やホイールの回転量が取れなくて困るのですが、これは仕様なんでしょうか。



356 名前:355 mailto:sage [2008/06/17(火) 21:47:41 ]
すみません。ググったらすぐわかりました。MOUSEHOOKSTRUCTEXを使うべきなんですね。

357 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:54:32 ]
Editコントロールを改良してくれるというなら、TSFに対応してほしかった。
ただ、MS-IMEナチュラルインプットがフェードアウト気味で、どうでもいいと思うようになってきたけど。

358 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:59:44 ]
時代はATOKです

359 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:27:14 ]
SS_BITMAPを指定したスタティックコントロールにStretchBlt()した画像を貼り付ける方法が判りません。

(WM_PAINT以外)
hBmp = (HBITMAP)LoadImage(NULL, L"test.bmp", IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
HDC hDC = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, hBmp);
hBackDC = CreateCompatibleDC(hMemDC);
hBackBmp = CreateCompatibleBitmap(hMemDC, 256, 192);
SelectObject(hBackDC, hBackBmp);
SetStretchBltMode(hBackDC, STRETCH_HALFTONE))
StretchBlt(hBackDC, 0, 0, 256, 192, hMemDC, 0, 0, 640, 480, SRCCOPY);
ReleaseDC(hwnd, hDC);

(WM_PAINT内)
BeginPaint(hwnd, &ps);
SendDlgItemMessage(hwnd, IDC_BITMAP1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBackBmp);
EndPaint(hwnd, &ps);

このようにしてみましたが、スタティックコントロール上には何も表示されません。
何が原因でしょうか。
※便宜上WM_〜と書いていますが、実際はメッセージクラッカーを使用しています。

360 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:42:44 ]
WM_PAINT内

361 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:38:47 ]
マインスイーパの(ニコニコマークの)ボタンのようなものを押そうとしているんですが、

HWND hwnd = FindWindow(NULL,TEXT("マインスイーパ"));
POINT pos = {87,27};
int lparam = (pos.y<<16) + pos.x;
PostMessage(hwnd,WM_LBUTTONDOWN,0,lparam);
PostMessage(hwnd,WM_LBUTTONUP,0,lparam);

で押したことにできません。
pos={100,100}とかで下の領域部分は押したことにできます。
調べた感じ、ボタンっぽい部分はハンドルも持ってなさそうなのですが、
どうすれば押せるのでしょうか?

362 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:40:11 ]
>>361
F2を押したことにするんじゃだめなの?

363 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:43:35 ]
>>362
マインスイーパをプログラムで操作したいというよりは、
ハンドルを持っていないボタンを押したいということなんです。

364 名前:362 mailto:sage [2008/06/17(火) 23:43:36 ]
よく考えたらF2よりメニューのID調べてWM_COMMAND送ったほうが楽かも

365 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:46:23 ]
>>363
SendInput



366 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:54:28 ]
>>365
やっぱりそれしかないんですかね?
PostMessageでなんとかしたかったけど、SendInputでいってみます。
ありがとうございました。

367 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:31:14 ]
「チートのためのSendInput」
という本を書いたら売れますか?

368 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:50:24 ]
チート専門ならWin32APIなんかよりAHKでも薦めるかな

369 名前:デフォルトの名無しさん [2008/06/18(水) 13:13:44 ]
すみません、ちょっとお聞きしたいんですが、
CreateFileMappingAの戻り値のHANDLEから
_open_osfhandle()と_fdopen()とで
FILE*を取得することは出来るんでしょうか?
どうもやってみても_open_osfhandle()が-1を返すんですが、
失敗する理由が自分のコーディングミスなのか仕様なのか分からないです。


370 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:27:41 ]
そのハンドルは別のものだから使えないよ

371 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:25:33 ]
>>360
遅レスすみません、漸く解りました。
ありがとうございます。

(WM_PAINT以外)
hBmp = (HBITMAP)LoadImage(NULL, L"test.bmp", IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
HDC hDC = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, hBmp);
hBackDC = CreateCompatibleDC(hMemDC);
hBackBmp = CreateCompatibleBitmap(hMemDC, 256, 192);
hPrevBmp = SelectObject(hBackDC, hBackBmp);
SetStretchBltMode(hBackDC, STRETCH_HALFTONE))
StretchBlt(hBackDC, 0, 0, 256, 192, hMemDC, 0, 0, 640, 480, SRCCOPY);
ReleaseDC(hwnd, hDC);

(WM_PAINT内)
BeginPaint(hwnd, &ps);
HBITMAP hTempBmp = (HBITMAP)SelectObject(hBackDC, hPrevBmp);
SendDlgItemMessage(hwnd, IDC_BITMAP1, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBackBmp);
SelectObject(hBackDC, hTempBmp);
EndPaint(hwnd, &ps);

372 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:27:16 ]
>>371
そのソースじゃ何も解っていないようだな

373 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:28:40 ]
WM_PAINTの度にSTM_SETIMAGEを送る必要はない気がするんだけど、自分の勘違いか?

374 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:40:35 ]
てかStretchBlt自体が不要。SS_REALSIZECONTROLでいいじゃん。
それとも、XP未満にも対応する必要でもあるの?

375 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:02:36 ]
戦略からコードの細部にいたるまで間違いだらけだな、感動した。
またクライアント領域の人か?基礎からちゃんと勉強しないと話にならんぞ。



376 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:40:19 ]
今更Win32の基礎を勉強するなんて馬(ry






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<81KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef