[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 06/01 23:03 / Filesize : 190 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Win32API質問箱 Build66



1 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:33:42 ]
スレ立てるまでもない、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質問箱 Build65
pc11.2ch.net/test/read.cgi/tech/1208847084/

463 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:33:14 ]
>>462
それは良かったですね

464 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:37:50 ]
とってもよかったでーす^^^;


465 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:53:01 ]
>>462
赤字で書いてるとこと違う事をしてるのは、分かっててやってるの?
変更したクラスから新しくウィンドウを作るってんなら、それでいいんだけど。

466 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 11:46:16 ]
どこをどう見ると間違ってないんだよw

SetWindowLong、SetWindowLongPtr、SetWindowSubclass使えよ

467 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 11:53:56 ]
間違い探しかよw
ぱっと見てスルーしてたけど、SetClassLong使ってたのか

468 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 12:56:47 ]
>>451
VS2005なら、Windows SDK6.0だか6.1入れてCLやRCをそちら付属品を
使うようにすればVista圧縮形式に対応できる。
VS2008はRCでもMSDEVリソースエディタでも標準サポート

469 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 15:43:24 ]
>>452
9xだと本当にDOSが動いてるからね。
NTだと単なるエミュだし

470 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 15:52:02 ]
>>468
さんくす
RC.EXEだけでも入れ替えておけばビルド後のイベントでゴニョゴニョする必要は無さそうだw
IDEのリソースエディタでアイコンなんて作らないからそっちはまぁいいや

471 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 16:26:48 ]
>>470
VS2005だと、圧縮形式アイコンが含まれる.rcファイルがMSDEVで開けないんで注意



472 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 16:35:26 ]
VC2005はmsdevじゃなくてdevenvだったと思うが。
そんな俺はVC6ユーザー

473 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:01:52 ]
imepita.jp/20080526/612210
このような四角いボタンってどうやって作るんですか?

474 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:03:04 ]
言い忘れました。×ボタンです。

475 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:09:14 ]
クローズボタンのことが聞きたいのかオーナードローのボタンのことが聞きたいのか

476 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:25:53 ]
1. Toolbar を作る
2. ImageList を作る
3. [×] のビットマップを作る
4. 3. のビットマップを 2. の ImageList に追加する
5. ImageList を Toolbar にセットする
6. Toolbar に 3. のビットマップを持つボタンを追加する

477 名前:デフォルトの名無しさん [2008/05/26(月) 18:08:23 ]
指定したiniファイルのキーを削除するapiを教えてください

478 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:08:57 ]
やだ

479 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:55:43 ]
WritePrivateProfileStringで
lpAppNameにセクション名
lpKeyNameにキー名
lpStringにNULL
lpFileNameにiniファイルのパスを指定すると
指定したセクション内のキーが消える

480 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:04:01 ]
>>479
まじっすか^^
WritePrivateProfileStringで値をNULLにすると消えるんですね
これは知らなかった。ありがとうございます!

481 名前:479 mailto:sage [2008/05/26(月) 19:04:52 ]
ってかMSDN読めよ



482 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:05:09 ]
MSDNも読まずにWin32APIを使おうとする奴の気が知れない

483 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:05:36 ]
つーか引数どうやって知ったのかw
そこに説明もあると思うんだがなあ

484 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:33:34 ]
MSDNなんて読まなくていい
ここで質問するだけで丁寧な解説が日本語で得られる
お人好しな人間ほどうまく扱えば便利なものは無い


というのが俺の妄想

一応言っとくが俺はちゃんとMSDNで調べる派だからな

485 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:36:57 ]
俺みたいに嘘を教える奴も居るから気をつけないと

486 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:40:39 ]
俺みたいにかく乱する奴もいるからry

487 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:45:04 ]
お前ら必死でワロタ

488 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:31:16 ]
VC.net2003 + SDKで、ImageList使える?
ビルドは通るが、CreateWindowExでウィンドウ作成した時点で、'hoge, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' から
型 '_IMAGELIST' を読み込めません。って出て落ちるんだけど・・・

489 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:37:28 ]
DiskcopyコマンドってどういうAPI使ってフロッピーに出力してるの?
このコマンドに限らずブート領域を書き込めるのって同じやり方だと思うんだけぢ
少なくともfoutやCopyFileではなさそう。

490 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:39:08 ]
> 思うんだけぢ
どこの方言でぢか?

491 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:43:52 ]
アマゾン地方の方言が出てしまいました



492 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:47:15 ]
DeviceIoControlとかじゃないの
知らんけど

493 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:55:32 ]
>>489
DDKを見ましょうね。

494 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:04:43 ]
やだ

495 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:06:57 ]
>>489
NTならCreateFileで"\\\\.\\A:"のようにすると生のドライブを開ける。SDKにも書いてある。
9xなら>>452。KB125712やKB174569など。

496 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:10:48 ]
あした試してみよう

497 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:27:50 ]
もうすぐ明日だろ

498 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:56:37 ]
関数を動的に作ってウィンドウプロシージャとして渡す事ってできないんですか?

クラスのメンバ関数をウィンドウプロシージャにできないのが、
理屈ではよくわかるんですけど、なんか納得できなくてw
static使って場合分けするのもなんか反則的というか、やりたいことと違う気がして…
クラスのコンストラクタで関数を動的に作ってコントロールのプロシージャとして使い、
デストラクタでコントロールは期すると共に関数も破棄できないかなぁと。


…ゴメンナサイ、なんかもう投げやりです。

499 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:06:12 ]
グローバル関数でのプロシージャで
各クラス内の自作プロシージャにそれぞれ処理を割り振ったりすれば良いんじゃない?

500 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:09:06 ]
つーか自分でラッパー書けばいいだけじゃね

501 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:10:07 ]
僕ハッカー!!!



502 名前:489 mailto:sage [2008/05/27(火) 00:11:11 ]
CreateFile
DeviceIoControl
WriteFile
でなんかフロッピーに出してるのは判った
しかしこの方法でフロッピーの中にファイルを作る方法がわからなう

503 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:13:47 ]
FAT32の仕組みでも覚えろ

504 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:14:44 ]
>>498
web.archive.org/web/20070810174250/http://techtips.belution.com/ja/vc/0009/
ようするに、静的メンバ関数の中から
何らかの方法でウィンドウに対応するオブジェクトを得て、
そのオブジェクトの非静的メンバ関数に処理を渡せばいい。

ウィンドウクラスの場合、次のようなものを使って
オブジェクトへのポインタを保存する例が多い。
Get/SetProp
Get/SetWindowLongPtrとウィンドウクラスごとの追加データ
Get/SetWindowLongPtrとGWLP_USERDATA

ちなみに、ATLは本当に動的に関数を作って対処している。
hp.vector.co.jp/authors/VA022575/c/msgmap.html



505 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:16:02 ]
>>502
逆に、ファイルがある状態のフロッピーディスクを
吸い出して中身を眺める、もちろんFATの構造の解説と一緒に。

506 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 02:10:13 ]
アプリケーションへのアイコン設定は、
検索で調べると必ず .rc への記述方法が紹介されてますが、
.rc を経由せずに .cpp のプログラムのみで設定って出来るんでしょうか?
よろしくお願い致します。

507 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 03:17:45 ]
>>502
何がしたいのかよくわからんが
フロッピーの中にファイルを作るのならばCreateFileでいいと思うが。
diskcopyだったらセクタを全部コピーすればいい

508 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 07:09:57 ]
あるウィンドウがHWND_TOPMOSTで最善面になっているかどうかを判断するにはどうすればいいのでしょうか?

509 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 07:58:26 ]
GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST

510 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:25:20 ]
>>504
atlthunk.cppが凄い
てかこんなのMSの中の人でないと書けないだろw

511 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:45:38 ]
書ける奴はいくらでもいるだろうが、実際に、書こう思う奴は、それほどいない。
MFCはHWNDとベースクラスへのポインタを、
いわば、std::map< HWND, Hoge >的なもので管理していて、メッセージが来るたびに検索してると聞いたが。



512 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:33:10 ]
>>511
実際に中身を見てから言って欲しいね

513 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:46:49 ]
コード生成はWindowsより前なら常套手段だから昔の人なら楽勝

514 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:52:23 ]
そんな話はしていない
いいから当該ソースを見ろ

515 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:24:54 ]
WinMainからDialogBoxでモーダルダイアログを作成しております。
DialogProc内から例外をthrow(あるいはRaiseException)したところ、
WinMainで正常にcatch出来ました。

ところがDialogProcからさらに孫ダイアログを作成し、
孫ダイアログのDialogProc内から例外をthrowしたところ、
子ダイアログのDialogProcでcatch出来たのですが、
return後にAccess violationで落ちてしまいました。

どうすればreturn後に処理を続行できるのでしょうか?

516 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:27:53 ]
長くて恐縮ですがソースを貼らせて頂きます。
INT_PTR CALLBACK proc2(HWND wnd, UINT msg, WPARAM w, LPARAM) {
 switch (msg) {
  case WM_INITDIALOG: return TRUE;
  case WM_COMMAND:
   switch (LOWORD(w)) {
    case IDOK:
     EndDialog(wnd, LOWORD(w));
     throw std::exception("HOGE!"); // 例外をthrow
    case IDCANCEL: EndDialog(wnd, LOWORD(w)); return TRUE;
   } break; } return FALSE;
}
INT_PTR CALLBACK proc1(HWND wnd, UINT msg, WPARAM w, LPARAM) {
 switch (msg) {
  case WM_INITDIALOG: return TRUE;
  case WM_COMMAND:
   switch (LOWORD(w)) {
    case IDOK:
     try {
      DialogBox(GetModuleHandle(0), MAKEINTRESOURCE(IDD_2), wnd, proc2);
     } catch (const std::exception&) {}
     return TRUE; // return後にAccess violation
    case IDCANCEL: EndDialog(wnd, LOWORD(w)); return TRUE;
   } break; } return FALSE;
}
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
 try {
  DialogBox(GetModuleHandle(0), MAKEINTRESOURCE(IDD_1), 0, proc1);
 } catch (const std::exception&) {
 } catch (...) {} return 0;
}

517 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:44:00 ]
>>515
C++以外のスタックフレームを飛び越えるthrow〜catchって
頭の悪いlongjmpと同じだと思うがどうか

518 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:01:23 ]
文字列の"123.45"をfloatに変換するAPIを教えてくだせえ

519 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:07:35 ]
なんでわざわざAPI使うん?

520 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:11:36 ]
wsprinf があるんだから wsscanf もあるにちがいないw

521 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:13:22 ]
atofの返値がfloatじゃなくてdoubleだからって言いそうな気がする。



522 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:17:36 ]
いやdoubleでもいいからさっさと教えろよ
どうせ知らないだろーけど


523 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:36:08 ]
VarR4FromStr
VarR8FromStr

524 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:23:01 ]
>>520
wsscanfならMSのFTP鯖にソースが置いてある
Win16時代の物みたいだから今でも使えるかどうかは知らん

525 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:30:58 ]
crtdll.dllからscanfをインポートして使う・・・ってのはAPIの範疇というと苦しいか?

526 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:52:43 ]
msvcrt.dllならいいんじゃね

527 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:07:36 ]
crtdllとかmsvcrtにあるprintfとかscanfって_stdcallじゃなくて_cdeclでいいんだよね?

528 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 14:28:31 ]
wsprintfもcdeclだろ
可変長なのにどうやって呼び出し先でスタックポインタを戻せるんだよ

529 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:10:26 ]
うるせークズ

530 名前:デフォルトの名無しさん [2008/05/27(火) 15:13:58 ]
>>528
キモいよ

531 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:14:00 ]
可変長のはともかく、strcpyとかもCDECLでいいんだろうか?



532 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:16:09 ]
試せばいいだろハゲ

533 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:23:22 ]
そんなの関係ねーだろクズが

534 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:31:18 ]
関係ねー事聞くなカス

535 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:35:03 ]

            ノ
           (゚Д゚)
           ( (7
           < ヽ

536 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:38:25 ]
>>531みたいなのは実際試した場合間違っていても動いちゃうから困りもの

537 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:44:25 ]
>>535
なんだその態度は!!

538 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:42:51 ]
>>536
デバッグビルドなら呼び出し後にchkstkでESPがチェックされるから大抵気付く

539 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:25:05 ]
FindWindow関数によってハンドルを調べたウィンドウを強制的に移動させるにはどうしたらよいでしょうか。
SendMessage関数でWM_MOVEを送っても移動しないことがあります。

540 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:26:36 ]
WM_MOVEは動いた後に送られてくるメッセージなのに
それで動くウインドウがあるのか?

541 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:28:35 ]
正しくはどのメッセージを送ればよいのでしょうか?




542 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:29:27 ]
>>541
MoveWindow 関数で

543 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:30:30 ]
ありがとうございます。

544 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:32:30 ]
SetWindowPosとかもあるし、好きなので。

545 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:17:01 ]
>>540
WM_SIZEを送ると動くウィンドウならあるよ

546 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:29:00 ]
動かないウィンドウもあるってことですね。

547 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:49:39 ]
>>517
遅レスすいません。
プロシージャ内で気軽にSTLなどを使いたかったのですが、邪道だったでしょうか・・・。
とりあえずプロシージャをreturnする前に全てcatchする方向で再考してみます。

548 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:50:20 ]
STLが○| ̄|_にみえたのは俺だけですか?

549 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:53:30 ]
>>548
面白くないよ

550 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:02:12 ]
確かDispatchMessageを例外捕捉しとくとウィンドウ内部の例外が捕まえられたような

551 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:07:35 ]
>>549は大爆笑して悔しかったんだろうなぁ



552 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:09:17 ]
そもそもAPIから呼ばれるコールバック関数内で例外を投げるなんてアホとしか思えない

553 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:09:49 ]
>>548=>>551
はいはいわろす

554 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:11:58 ]
>>535,537
ワロタw

555 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:41:01 ]
>>550
VC++ではC++例外を構造化例外で実装してるようだから捕まえられるかもしれないけど
C++言語的には未定義動作だからやめた方がいい

556 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:56:03 ]
未定義とか不定とかどうでもいい
今時VC++以外でWin32開発してる奴の方が悪い

557 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:57:48 ]
VCなんてもう終わってるだろうがw

558 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:27:35 ]
終わってません
というか終わりません

559 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:08:58 ]
MSではVBについで売れてる言語製品だしな

560 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:13:15 ]
でも、そのVB6も来月で...

561 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:13:38 ]
何その時代錯誤



562 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:39:04 ]
俺も516みたいにWinMainにcatch書くことはあるけど、
その場合はエラーログ書いたりメッセージ出したりして、
とっととExitProcessするだけだな。

563 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:16:09 ]
VBwwwwwwwwwwwwwwwwwwwwww






[ 続きを読む ] / [ 携帯版 ]

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

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