Win32API質問箱 Build ..
[2ch|▼Menu]
299:デフォルトの名無しさん
08/06/16 14:56:54
HTREEITEMのハンドルの比較はどのようにやればいいですか?

300:デフォルトの名無しさん
08/06/16 15:12:45
==

301:デフォルトの名無しさん
08/06/16 15:26:44
冗談抜きで==以外にアイテム同一の比較する方法はない

302:デフォルトの名無しさん
08/06/16 15:37:52
>>288
遅レスすみません、DrawText()にDT_CALCRECTを渡す方法で出来ました。

上記方法での取得値 - リストボックスの幅 + 縦スクロールバーの幅

で正確なスクロール幅が算出出来ました。
本当にありがとうございました。

303:デフォルトの名無しさん
08/06/16 16:20:15
一瞬>>300が何のレスか分からないw

304:デフォルトの名無しさん
08/06/16 17:49:15
Cから呼び出したDLL内でEXCEPTION_ACCESS_VIOLATION (0xc0000005)
が発生した場合、それをC側から補足できますでしょうか?
例外が発生したことを上の関数に返したいのですが
難しいでしょうか?

よろしくお願いいたします。

305:デフォルトの名無しさん
08/06/16 17:50:49
VC++なら___try - ___catch(EXCEPTION_EXECUTE_HANDLER)

306:デフォルトの名無しさん
08/06/16 17:51:01
___じゃない、__

307:デフォルトの名無しさん
08/06/16 18:17:43
>>305
ありがとうございます。
スーパー助かりました。

308:デフォルトの名無しさん
08/06/16 19:33:49
コンビニどういたしまして。

309:デフォルトの名無しさん
08/06/16 19:43:32
まさか全く関係ない奴が、どういたしましてなんて言ってないよなw

310:デフォルトの名無しさん
08/06/16 19:51:31
私には心の分身が居るので彼らがどういたしましてを言っています

311:デフォルトの名無しさん
08/06/16 19:54:08
たとえ心が離れていても僕たちはいつもひとつ!

312:デフォルトの名無しさん
08/06/16 20:21:42
それ多重人格じゃね?

313:デフォルトの名無しさん
08/06/16 21:40:53
このスレには人工無脳が搭載されてるのを知らないのか?
「ありがとうございます」に対して自動で「どういたしまして」と返信して回答者の煩わしさを軽減してくれてるんだよ。

ただあまり賢くないから、たまに暴走して意味不明なレスで荒れたり
「なぜこんな設計にするのか理解できない」→「分からないならレスしないでください」
と煽ったりして荒れる原因になって迷惑な一面もある。

314:デフォルトの名無しさん
08/06/16 21:51:45
説明ありがとうございます

315:デフォルトの名無しさん
08/06/16 21:53:25
どういたしまして

316:デフォルトの名無しさん
08/06/16 22:48:13
質問です。

CreateProcessでメモ帳(notepad.exe)を起動する際に、
ユーザーがCtrlキーを押しながら起動しても最前面にメモ帳を表示させたいのですが、
試行錯誤を繰り返していますが上手くいきません。
ご教授お願いいたします。

317:デフォルトの名無しさん
08/06/16 22:49:43
お断りします

318:デフォルトの名無しさん
08/06/16 22:51:32
お断りじゃあ仕方ないよな
あきらめろ

319:デフォルトの名無しさん
08/06/16 23:26:58
AttachThreadInputとかかね?

320:デフォルトの名無しさん
08/06/16 23:30:10
>>243
規制に巻き込まれて遅レスだが
WS_EX_TRANSPARENTスタイルを追加してWM_ERASEBKGNDで背景画像をBitBlt。
ちらつくので親ウィンドウにWS_CLIPCHILDREN追加して
RichEditのカーソル付近の表示がおかしくなるので親ウィンドウのWM_PAINTで
RichEditのUpdateWindow追加でいけると思う。

321:デフォルトの名無しさん
08/06/16 23:56:19
>>291
IME対応を何もしなくても、確定した文字列は最悪WM_CHARで1文字ずつ送られてくる (IME-unaware)。
ANSIモードだとShift_JISの2バイト文字も1バイトずつ送られてくる。

それだとあまりにも不便すぎるから、IMM APIを使って取得する。
確定文字列の取得はWM_IME_COMPOSITIONかつlParam & GCS_RESULTSTRのとき。
詳しくはググれ。あと、再変換対応も忘れるな。

現在はIMMからTSFへ移ろうとしているんだが、
IMMでしか使えない変換エンジンの1つにATOKもあるし、
XPまでだと様々な理由でTSFをオフにしたり、そもそもTSFが入っていなかったりするので、
TSFのみの対応のアプリケーションは非現実的。IMMのみかIMM/TSF両対応にすべき。

322:デフォルトの名無しさん
08/06/17 00:40:38
> ユーザーがCtrlキーを押しながら起動しても

今頃こんな機能があることを知った

ありがとう2ちゃんねらー

323:デフォルトの名無しさん
08/06/17 00:44:18
Ctrlキー押して起動してみたけど
なんもならないぞ

324:デフォルトの名無しさん
08/06/17 01:06:34
>>322
マジだ・・・今まで知らんかった

325:デフォルトの名無しさん
08/06/17 01:13:50
Shiftを押しながらだと・・・


326:デフォルトの名無しさん
08/06/17 01:17:19
shift 最小化して起動
alt  プロパティ

知りませんでした

327:デフォルトの名無しさん
08/06/17 01:25:42
すげぇマジだ。
Windowsのプログラマは只者じゃねーな。

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

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

329:デフォルトの名無しさん
08/06/17 10:01:57
> Shift+クリック メニューが勝手に消えない

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

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

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

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

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

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

335:デフォルトの名無しさん
08/06/17 12:10:27
STARTUPINFOに仕込んでてもダメかな…

336:デフォルトの名無しさん
08/06/17 12:15:25
流出はしてたかもしれんなw

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

338:デフォルトの名無しさん
08/06/17 12:22:58
実際にやってみれ
多分無理

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

340:デフォルトの名無しさん
08/06/17 14:18:04
メモ帳をフックすればいいだろ

341:デフォルトの名無しさん
08/06/17 14:31:43
ソレダ!

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

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

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

344:343
08/06/17 14:42:45
下2行はプロセスIDからウィンドウハンドル探す方法ね。

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

346:デフォルトの名無しさん
08/06/17 16:57:07
メモ帳側が変わるかということじゃね

347:デフォルトの名無しさん
08/06/17 19:19:45
変わらねーよw

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

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

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

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

350:デフォルトの名無しさん
08/06/17 19:45:13
comctl32を設計した馬鹿をひっぱたきたい。

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

352:デフォルトの名無しさん
08/06/17 19:57:05
>>350
つうほうしまたし

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

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

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

356:355
08/06/17 21:47:41
すみません。ググったらすぐわかりました。MOUSEHOOKSTRUCTEXを使うべきなんですね。

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

358:デフォルトの名無しさん
08/06/17 21:59:44
時代はATOKです

359:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/17 22:42:44
WM_PAINT内

361:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/17 23:40:11
>>361
F2を押したことにするんじゃだめなの?

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

364:362
08/06/17 23:43:36
よく考えたらF2よりメニューのID調べてWM_COMMAND送ったほうが楽かも

365:デフォルトの名無しさん
08/06/17 23:46:23
>>363
SendInput

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

367:デフォルトの名無しさん
08/06/18 00:31:14
「チートのためのSendInput」
という本を書いたら売れますか?

368:デフォルトの名無しさん
08/06/18 02:50:24
チート専門ならWin32APIなんかよりAHKでも薦めるかな

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


370:デフォルトの名無しさん
08/06/18 14:27:41
そのハンドルは別のものだから使えないよ

371:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/18 17:27:16
>>371
そのソースじゃ何も解っていないようだな

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

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

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

376:デフォルトの名無しさん
08/06/18 20:40:19
今更Win32の基礎を勉強するなんて馬(ry


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5252日前に更新/81 KB
担当:undef