Win32API質問箱 Build47
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/13(月) 08:56:12やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0459デフォルトの名無しさん
2006/11/27(月) 04:39:11この先、microsoftが提供する開発環境って
platform sdk が無くなって、.net flameworkだけになるってことはありますか?
ちょっと疑問に思っただけなんですが
0460デフォルトの名無しさん
2006/11/27(月) 04:51:25従来のPlatform SDKの内容(+Vistaの新API)は今のところそのまま入ってる。
将来的には(かつてのWin16 APIみたいに)Win32 APIはWDKに追いやられて
ユーザーモードアプリはWinFX API一本になるということもあるかもね
0461デフォルトの名無しさん
2006/11/27(月) 06:56:20ウィンドウ関係のAPIラッパクラスを作ってる時にはじめて知ったわ
0462デフォルトの名無しさん
2006/11/27(月) 12:08:07LVN_BEGINDRAGでメッセージループを廻しているかDoDragDropしているのか
0463デフォルトの名無しさん
2006/11/27(月) 12:38:15チェックが付いているかどうかって、レジストリから確認できるの
でしょうか。
0464デフォルトの名無しさん
2006/11/27(月) 13:04:26http://pc7.2ch.net/pcqa/
Windows
http://pc8.2ch.net/win/
0465デフォルトの名無しさん
2006/11/27(月) 14:13:54HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive
0466465
2006/11/27(月) 14:16:37間違えた・・・・
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaverIsSecure
だ。
0467デフォルトの名無しさん
2006/11/27(月) 18:31:49クリップボード内のデータの履歴を取り,再利用するものを想定しています.
テキストだけでなく,画像やリンクなどを含めたデータをクリップボードから取り出し,
保存するにはどのようにしたらよいでしょうか?
0468デフォルトの名無しさん
2006/11/27(月) 18:42:380469デフォルトの名無しさん
2006/11/27(月) 18:47:21取り出すのはOpenClipboard, EnumClipboardFormats, GetClipboardDataなど。
保存は御自由に。
わからない事をもっと具体的に端的に質問することをお勧めします。
0470デフォルトの名無しさん
2006/11/27(月) 18:49:520471デフォルトの名無しさん
2006/11/27(月) 22:01:30今の規格上はNULLはゼロと同じ。
0472デフォルトの名無しさん
2006/11/27(月) 22:04:370473デフォルトの名無しさん
2006/11/27(月) 22:11:360474デフォルトの名無しさん
2006/11/27(月) 22:30:47他にFtpでのダウンロードを中断する方法があったら教えてください。
お願いします、ほんとに。
環境はWinXP+VS2005のMFC+SDKです。
Win2000以降のみ対応できればよいです。
0475デフォルトの名無しさん
2006/11/27(月) 22:36:060476デフォルトの名無しさん
2006/11/27(月) 22:37:49コンパイラによって、ならまだ解るが。
0477デフォルトの名無しさん
2006/11/27(月) 22:39:240478デフォルトの名無しさん
2006/11/27(月) 22:40:31コンパイル環境によっては0じゃない場合もあるのは確か
0479デフォルトの名無しさん
2006/11/27(月) 22:51:25WinINet使えば?
0480デフォルトの名無しさん
2006/11/27(月) 22:59:040481デフォルトの名無しさん
2006/11/27(月) 23:03:280482デフォルトの名無しさん
2006/11/27(月) 23:21:240483デフォルトの名無しさん
2006/11/27(月) 23:26:000484デフォルトの名無しさん
2006/11/27(月) 23:58:51OleGetClipboardのほうが形式を考えなくてすむから楽だと思うぞ。
0485デフォルトの名無しさん
2006/11/28(火) 01:24:15大変遅くなって申し訳ありませんがレスをいただきありがとうございました。
恥ずかしながらWindows SDKやWinFX APIというのは意味をよく知りませんでしたので
勉強になりました。ありがとうございます。
0486デフォルトの名無しさん
2006/11/28(火) 02:47:44内部表現の話とごっちゃにしてる。ここはWin32 APIスレだし。
それともWin32sではヌルポインタをアクセス違反にするためWin32アプリから見える
アドレスとVxDから見えるアドレスが64KBずれてるなんてトリビアを話したいのか。
0487デフォルトの名無しさん
2006/11/28(火) 06:49:16具体的にはどの関数を使えば…
0488デフォルトの名無しさん
2006/11/28(火) 08:40:420489デフォルトの名無しさん
2006/11/28(火) 08:52:56目的と手段を逆に取り違えている奴が世の中多すぎ。
0490デフォルトの名無しさん
2006/11/28(火) 08:59:100491デフォルトの名無しさん
2006/11/28(火) 09:04:360492デフォルトの名無しさん
2006/11/28(火) 09:38:170493デフォルトの名無しさん
2006/11/28(火) 09:42:130494デフォルトの名無しさん
2006/11/28(火) 09:45:11それぐらい自分で調べろよ。
0495デフォルトの名無しさん
2006/11/28(火) 09:52:26は、ヌルポインタの値が0でなくても、コンパイラによってその型のヌルポインタの値に変換される
と聞いたことがある。
だからC++ではNULLと0は等価らしい。
0496デフォルトの名無しさん
2006/11/28(火) 10:23:31FONTEDIT\FONTEDIT.C(566): (HWND)NULL, /* no parent */
FONTEDIT\FONTEDIT.C(567): (HMENU)NULL, /* use class menu */
0497デフォルトの名無しさん
2006/11/28(火) 10:26:150498デフォルトの名無しさん
2006/11/28(火) 10:28:52Wininetよく知らないからなんともいえないけど、
FtpOpenFileとInternetReadFileでやるんじゃない?
もしGUIアプリ作ってるんなら、これをスレッドでやる方法と
内部でメッセージループでやる方法があると思う。
結構大変だよ。
0499デフォルトの名無しさん
2006/11/28(火) 11:19:22SDKは空ハンドルにもNULL使うよな
0500デフォルトの名無しさん
2006/11/28(火) 11:40:40それとは別に INVALID_HANDLE_VALUE も使うし ややこしい
0501デフォルトの名無しさん
2006/11/28(火) 11:48:350502デフォルトの名無しさん
2006/11/28(火) 12:16:52CM_TEXTCHANGEでチェックするしかないんでしょうか‥‥
0503デフォルトの名無しさん
2006/11/28(火) 12:52:52エンターキーで次のエディットにフォーカスを移動
させようと思っています。
サブクラス化されたウィンドウプロシージャでイベントを
捕まえてSetFocusで移動はできるのですが、
TABキーを送ってまとめて処理したいです。
TABキーの送り方を教えてください。
0504デフォルトの名無しさん
2006/11/28(火) 12:55:27ハンドルはOSが内部で確保する構造体へのポインタだからなんだよ。
0505デフォルトの名無しさん
2006/11/28(火) 13:36:38DWORDの引数にNULLを渡すのはおかしいという話題なのに、
なぜいきなりポインタであるハンドルの話を出してきたのか。
0506デフォルトの名無しさん
2006/11/28(火) 14:44:11COM風のDLLを作ってるときに、
void IHOGE::Release()
{
// あらかじめ保存しておいた、exe側のWinAPIのFreeLibrary()のアドレスと
BOOL (WINAPI *fpFreeLibrary)(HMODULE) = m_fpFreeLibrary;
// DLLのハンドルをローカル変数にコピーしてから、
HMODULE hLibrary = m_hLibrary;
// 自殺して
delete this;
// DLL解放
fpFreeLibrary(hLibrary);
}
なんてやろうとしたんですが、DLL解放のところでバグってしまいました。
以前VC6でやっててうまくいってたんですが
(実行時にDLLの方がDLL解放の処理を書いてないバージョンのままだった可能性はあります・・・)
VC2005Expressでやるとダメでした。
こんなことせずに自前で解放すれば大丈夫なのですが、
DLLから得た関数の中でDLLを解放することはそもそも原理的にダメなのでしょうか?
そのあたりの理屈が知りたいので、よろしければ教えてください。
0507デフォルトの名無しさん
2006/11/28(火) 15:14:56そのDLLを解放するコードIHOGE::Releaseは、解放しようとしているDLLにあるわけで。
列車が走ってるレールを破棄するようなもんだ。
0508デフォルトの名無しさん
2006/11/28(火) 16:29:210509デフォルトの名無しさん
2006/11/28(火) 16:49:18やるとしたら、一時的にスレッドを作って(そのスレッドはDLL内の関数で良い)、
そこでFreeLibraryAndExitThreadを呼ぶという方法がある。
ちなみに本物のCOMでは、COMがDLLを管理している。
(ある程度はDLL自身も制御できるが、直接FreeLibraryを呼ぶという事態はない)
0510デフォルトの名無しさん
2006/11/28(火) 16:54:59こんなもん何に使うんだよwwwwwってなるよな。
0511デフォルトの名無しさん
2006/11/28(火) 17:09:58FreeLibraryAndExitThread呼ぶスレッドをIHOGE::Release()で作っても
FreeLibraryAndExitThreadが呼ばれる前にIHOGE::Release()から抜けて
EXE側のコードに戻らないとダメだな。
0512デフォルトの名無しさん
2006/11/28(火) 17:29:18>FreeLibrary(hModule);
>ExitThread(dwExitCode);
こんな感じで実装されてるってだけのことだろうが酷い説明だな
0513デフォルトの名無しさん
2006/11/28(火) 17:38:49でもAdvanced Windowsにはきちんと使い方が書いてあったよ。
0514デフォルトの名無しさん
2006/11/28(火) 17:57:40メニューバーからダイアログの表示
ShowWindow( hDlg, SW_SHOW )
を使用すると何故か↓の様に、ダイアログから下の部分が更新されていません。
http://gamdev.org/up/img/8238.jpg
ダイアログが親?ウィンドウより外側に持って行くか
キーボードを押してSW_SHOWを呼び出す様な処理の場合は
問題なく全体を更新します。
メニューバーまたはメッセージに何かしらあるのでしょうか。
0515デフォルトの名無しさん
2006/11/28(火) 18:06:40WM_PAINTの処理がおかしいだけじゃない?
BeginPaint使わないで、ValidateRect(hWnd, NULL)してるとか。
0516デフォルトの名無しさん
2006/11/28(火) 18:19:51ハンドルから手を離して挨拶するって危険なんじゃないかって
思うんだ。しかし、運転士たちは危ないと思ってない。
ここに行って
http://hobby7.2ch.net/test/read.cgi/bus/1162901425
挙手してんじゃねえよ
って教えてあげて。よろしくお願いしますね。
0517デフォルトの名無しさん
2006/11/28(火) 18:24:32それはそれで表示板にそういうのあるんだっけ?
0518514
2006/11/28(火) 19:01:47WM_PAINTは使ってないですが
ちょいと調べてみます。有難うございます。
現在のメッセージ処理
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
if( !DialogMessage( &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
else
{
Update();
Render();
Sleep( 1 );
}
0519デフォルトの名無しさん
2006/11/28(火) 19:26:22楽できました。ありがとう。
0520デフォルトの名無しさん
2006/11/28(火) 21:18:18Win32API的にはどのように再現できるでしょうか?
0521デフォルトの名無しさん
2006/11/28(火) 21:37:250522514
2006/11/28(火) 21:43:43メニューバーに触れると、SSの様な事態になるので
メニューバーの使用をやめるか、モーダルダイアログにするなりしてみます。
0523520
2006/11/28(火) 22:12:13確かに自プロセスならreturnでことたりるのですが
Visual Studioのような他プロセスがどうのような方法で
ステップアウト等の処理をしてるか分かりません
0524デフォルトの名無しさん
2006/11/28(火) 22:16:310525デフォルトの名無しさん
2006/11/28(火) 22:18:350527デフォルトの名無しさん
2006/11/28(火) 22:55:48>>524
0528デフォルトの名無しさん
2006/11/28(火) 23:08:43驚いたことに最近はね、プロセッサ例えばPentium(というかi386からだけど)
の中にはデバッグレジスタ(DRレジスタ)なるものが存在するんだよ。
どう使うのかは知らんw
さわらぬ神にタタリなしww
0529デフォルトの名無しさん
2006/11/28(火) 23:24:37例えばだけど、0番地付近がシステムで予約されている場合とかさ。
そういう環境用のコンパイラはきっとNULLを-1とかにするんだろうね。
0530デフォルトの名無しさん
2006/11/28(火) 23:37:19内部表現が-1でもC/C++のソース上は常に0。
0531デフォルトの名無しさん
2006/11/28(火) 23:45:13C++は、じゃない?
0532デフォルトの名無しさん
2006/11/28(火) 23:47:48でも 0 の部分がほかの数値になることはない
0533デフォルトの名無しさん
2006/11/28(火) 23:53:190534デフォルトの名無しさん
2006/11/29(水) 00:09:19ただしポインタであるべき文脈で 0 を使ってもいいことは保証されてる。
0535デフォルトの名無しさん
2006/11/29(水) 00:18:08デバッグレジスタへのアクセスはリアルモードなどの状態でしか許されていない
そのかわりWaitForDebugEventとかいうAPIが提供されてるがどう使うか分からん
どっちにしろさわらぬ神にタタリなしww
0536デフォルトの名無しさん
2006/11/29(水) 00:28:130537デフォルトの名無しさん
2006/11/29(水) 00:32:52IntPtr.Zero渡していいのかな?
C#はよく知らんが
0538デフォルトの名無しさん
2006/11/29(水) 00:33:55OllyDbgは余裕でハードウェアブレークポイント提供してますが何か?
0539デフォルトの名無しさん
2006/11/29(水) 00:39:28Win32の世界に限ればNULLは内部表現も0であると決め付けてまったく問題ない
>>538
MS純正のi386kdにもあると思う
0540デフォルトの名無しさん
2006/11/29(水) 00:57:46NULL使っててもいいんじゃないか?
>>539がいうように"Win32の世界に限れば"な
0541デフォルトの名無しさん
2006/11/29(水) 01:03:20どさくさに紛れやがって・・・・
ガッ!!!
0542デフォルトの名無しさん
2006/11/29(水) 01:08:02とりあえず開発環境で定義されている、MB_OK辺りでも使っとくか。
ポインタよりは、数値の定義という点でマシだから。
0543デフォルトの名無しさん
2006/11/29(水) 01:14:42テラワロス
0544デフォルトの名無しさん
2006/11/29(水) 01:35:17DrawText((hdc, MB_OK, MB_OK, "かんべんしてください",10);
0545デフォルトの名無しさん
2006/11/29(水) 01:54:22http://www.kouno.jp/home/c_faq/c5.html
0546デフォルトの名無しさん
2006/11/29(水) 03:08:49for( j=MB_OK; j<10; j++)
for( k=MB_OK; k<10; k++)
…
0547デフォルトの名無しさん
2006/11/29(水) 05:14:120548デフォルトの名無しさん
2006/11/29(水) 05:15:54( ゚д゚)
0549デフォルトの名無しさん
2006/11/29(水) 08:38:36そんなものを使う意味は無いよな。独自定義か、そのまま0でおk。
0550デフォルトの名無しさん
2006/11/29(水) 11:28:22ダイアログのCS_SAVEBITS。Saveされた絵を無効にすればいい。
それと、メニュー表示時は518のメッセージループを通らない。
あと、WM_PAINTハンドラはあった方がいい。
0551506
2006/11/29(水) 16:47:53なるほど、ちゃんと方法があるんだなぁ・・・
と、思ったもののなかなかDLL側だけでどうこうというのは
難しいですね(´・ω・`)
少しSleepでもさせてからFreeLibraryAndExitThreadを呼ぶとか
そんな方法しかないかなぁ(->Release()だけで済ませたいなら)。
色々やってみます、ありがとうございました。
0552デフォルトの名無しさん
2006/11/29(水) 21:54:46>>523
そもそも途中でreturnしたら関数の結果が変わるからNG
一般的には対象関数のreturn先にブレークポイントを敷いて
関数内ではステップ実行しない
本気で勉強したいならこちらをどうぞ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756117457
0553デフォルトの名無しさん
2006/11/29(水) 21:56:50523じゃないけど音速で注文した
0554520
2006/11/30(木) 01:43:58注文したいけど品切れorz
けどわくわくするAPIとかハッケンー
基本的なデバッグAPI
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/debugging_reference.asp
もうちょい踏み込んだデバッグAPI (devenv.exeと同じディレクトリにdbghelp.dllがあったのでVisual Studioはこっち使ってそう
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/dbghelp_functions.asp
pdb弄ぶライブラリ
ttp://msdn2.microsoft.com/en-us/library/x93ctkx8(VS.80).aspx
なんかできそうな気がしてきた
0555デフォルトの名無しさん
2006/11/30(木) 10:17:31なんて卑猥なライブラリなんだ
0556デフォルトの名無しさん
2006/11/30(木) 11:28:02亀だがwine検索してみたら
/***********************************************************************
* FreeLibraryAndExitThread (KERNEL32.@)
*/
void WINAPI FreeLibraryAndExitThread(HINSTANCE hLibModule, DWORD dwExitCode)
{
FreeLibrary(hLibModule);
ExitThread(dwExitCode);
}
_, ._
( ゚ Д゚) マジで?
0557デフォルトの名無しさん
2006/11/30(木) 11:37:14バロスwwwwwwww
なんだこの関数wwwwwwwww
0558デフォルトの名無しさん
2006/11/30(木) 11:40:37■ このスレッドは過去ログ倉庫に格納されています