Win32API 質問箱
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
Win32API以外の質問については >>2 を参照。
0002デフォルトの名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=990082077
VC++初心者質問スレ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=984812029
C++Builder相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=969458279
C言語なら、オレに聞け! <2>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893
なぜC++はあんなに難しいのか?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=982758107
C#相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=977112364
鬱だ氏のうDirectX
http://piza.2ch.net/test/read.cgi?bbs=tech&key=966655286
Java相談室 Part2
http://piza.2ch.net/test/read.cgi?bbs=tech&key=980858322
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725
こっちじゃできないの?
0005デフォルトの名無しさん
NGNGしかしギコ猫の相談スレが、スレ立てるまでも…に駆逐された
例もあるし、はてさてどうなるかな。ま、頑張ってくれ
0006デフォルトの名無しさん
NGNG>>3
普通にHMENUでオーナードローできない?
0007デフォルトの名無しさん
NGNG常駐秀丸とか。
まさか、タイマー使って監視してるんじゃないよね…。
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGhttp://fukuoka.cool.ne.jp/manabu/tech/2_webbrowser1.htm
0011デフォルトの名無しさん
NGNGマジレスを希望します
0012デフォルトの名無しさん
NGNGhttp://www.codeguru.com/shell/CascadingMenus.html
0014デフォルトの名無しさん
NGNGあれはどう見てもネタ
0015デフォルトの名無しさん
NGNGWin32API をきぼー
0016デフォルトの名無しさん
NGNGあれを参考にすればできると思うのだが…。
0017デフォルトの名無しさん
NGNGIWebBrowser2を使えばできる。
001817
NGNG0019デフォルトの名無しさん
NGNGどうやって仕様を知ることが出来るのですか?
誰か教えてください。お願いします。
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNGWindows95APIバイブルの2巻にいっぱい載ってる
0023デフォルトの名無しさん
NGNG教えてください。
0024デフォルトの名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725
0025デフォルトの名無しさん
NGNG拡張ヒープ領域の開始位置とサイズをすべて取得するのはどうやるの
自分の取得方法なら分厚いAPIマニアルに書いてあるけど相手のを
取る方法はどこにもない
0026デフォルトの名無しさん
NGNGハッカー級でないと難しいかも。
そのプロセスに潜り込んで、中から調べればいいだけ。
漏れならそうする。
マジで外から調べようとするなら、
たぶん、Native API を使わなきゃダメ。
002725
NGNG0028デフォルトの名無しさん
NGNGグローバルフックを仕込んで、DllMain の PROCCESS_ATTACH の
時に調べると良いのでは?
0030デフォルトの名無しさん
NGNGリストの項目が必ず先頭から表示されてしまいます。
直前に選択した項目をリストメニュー中で反転表示したいだけなのですが…
0031デフォルトの名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725
0032デフォルトの名無しさん
NGNGオーナードローの描画範囲矩形が渡されてない。。とか?
それだけではよくわかりません。
0033デフォルトの名無しさん
NGNGコールバックにthisを渡す方法がない。無理だわ...
0034デフォルトの名無しさん
NGNG不可能と思われ
0035デフォルトの名無しさん
NGNGコールバックで自分の処理が終わった後 postProc に委譲するでしょ?
これをどっから持ってくるかが問題なんだよなあ
グローバルな関数を動的に生成できないってのが癪だよ。
結局スタティック関数を抱えたクラス(のインスタンス)を動的に生成
することでしのいだが...
0036デフォルトの名無しさん
NGNGMoveFile(SrcFile, DestFile);
を使ったのですが、この関数が必ず失敗してしまいます。
同じ動作をさせようと思い、
CopyFile(SrcFile, DestFile, FALSE);
DeleteFile(SrcFile);
としてみたところ、CopyFile()は成功しますが、DeleteFile()が失敗します。
これはどうしてなんでしょう。
どうか解決策を教えてください。
0037デフォルトの名無しさん
NGNG削除したいファイルを別のアプリで開いたりしてない?
関数が失敗したあとにGetLastError()の返値を調べてみては。
003836
NGNGGetLastError()で調べてみたところ、
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
ということでした。
でも、削除したいファイルを別のアプリで開くというようなことはしていません。
(削除したいファイルはドラッグ&ドロップで得る形になっていますが関係あるのでしょうか)
0039デフォルトの名無しさん
NGNG誰も使ってなければそのメッセージはでない。
ドラッグ含めて調べなおせ。
004036
NGNGドラッグって、他のプロセスがファイルを使ってることになるんですかね。
004136
NGNG0042デフォルトの名無しさん
NGNGちゃんとDragFinish()やってるか?
どうせやってないとかそんなことだろ?
0043デフォルトの名無しさん
NGNGどうしたら宜しいのでしょうか。
0044デフォルトの名無しさん
NGNGつか、普通に作ってれば削除できる。自分でハンドル開いてたり
とか、きっとそういうレベルだな。クソの予感
0045デフォルトの名無しさん
NGNGデバッグ中なんかで途中終了したときに、ファイルをつかみっ放しに
したりしてることもある。
ドラッグ自体は確かにデスクトップだかなんかのプロセス管理下だが
放せば終わり。そんだけ
0046デフォルトの名無しさん
NGNGSpy を使う
004736
NGNG>自分でハンドル開いてたりとか
んなことしてないよ。それくらいのことなら自分で気づくさー
0048デフォルトの名無しさん
NGNGFindWindow(親探し) -> EnumChildWindows(子列挙)
-> GetWindowLong/GetClassLong(ターゲット判定)
ではだめかい。
0049デフォルトの名無しさん
NGNGNTor2000で削除権が無い
005136
NGNGたしかにWin2kなんですが、アドミニストレータでログインしてるんで削除権はあるんじゃないんかなぁ。
ほんとにいろいろ考えてもらってありがたいのですが、全然解決できない・・・
WM_DROPFILESを捕まえてDragQueryFile()でファイル名を得る。
そのファイル名に対しDeleteFile()、そしてDragFinish()。
と単純なことなんですが、ダメダメです。
0052デフォルトの名無しさん
NGNGリソース掴みは調べたの会。アイコンが表示されていると
掴まれて足りする。本気でやるなら、使用中プロセス置換か
稼動プロセス停止(ほとんどすべて止める)を考えないといけない。
使用中プロセス置換を考えるなら、各ドライブ毎に
テンポラリフォルダを用意し、そこに*ドライブをまたがないように*
削除したいファイルをMoveする。また、移動前には移動先チェックを
常にし、移動先のファイル名が既にある場合には他のファイル名に
移動先名を変えること。削除タイミングはマシン起動時か、次回AP
起動時の最初の方で削除を試みる。リブートをはさまないと失敗する
確率は高いからできればリブート後に削除すること。
ポイントは使用中でもドライブをまたがない移動、もしくは、リネーム
はできる、削除タイミングに注意かな。
もちろんこれでもwin386.swpとか署名付きドライバ(2000以降)など
できないものも当然あるが、普通のものなら大抵使用中でもできる。
0053デフォルトの名無しさん
NGNG>そのファイル名に対しDeleteFile()、そしてDragFinish()。
ガイシュツだけど、これは順序が逆では?
0054デフォルトの名無しさん
NGNGAdministrator でログオンしてるんなら、
誰が捕まえてるか、さっさと調べりゃいいじゃん。
こういうの、使うとかsa。
http://www.sysinternals.com/ntw2k/freeware/handle.shtml
どうせ結果は…。
005536
NGNG>53
順序入れ替えてもダメでした。
>54
試してみたら、自分自身がファイルのハンドル握っているようでした。
なんでhDropを解放したあとでもファイル操作がダメなんだろ・・・
ああ、俺ってバカだなー
0056デフォルトの名無しさん
NGNGSHFileOperationでさ。
0058デフォルトの名無しさん
NGNG005957
NGNGListViewのハンドルを得られたので、ListView_GetItemText
で、得られたリストから項目を吸い出そうとした所、対象のソフトから
「モジュールCOMCTL32.DLLのアドレス〜に対する書き込み違反〜」
等とシステムエラーを吐かれてしまいました。。一体何が。。。
0060デフォルトの名無しさん
NGNG・該当行アイテムが存在ない
・該当列サブアイテムが存在ない
・バッファが十分でない
ハンドルが正しいかどうかは ShowWindow(hXxx, SW_HIDE); とか試してみる
006159
NGNGHIDEしてみたら、しっかり隠れたのでハンドルは確かな様です。。。
バッファはとりあえず足りなくてもTextMaxで切り捨てで。
アイテムはおもむろに 16行の4列とか指定してみたんですが、
これが不味んですかね。。;
リストは12項目で1000個程あるのでとりあえず適当で良いかなと
思ったのですが。
006259
NGNGやはりエラーが。。。解らんTT
0063デフォルトの名無しさん
NGNGメニューを表示しないようにしたいのですが、どうすればいいのでしょうか?
出来れば、サブクラス化しないでやりたいのですが・・・
0064デフォルトの名無しさん
NGNG"新規プロジェクト"で単純なWin32 Applicationで以下のところだけ追加して
ビルドしてそれでもだめなら諦めろ。とりあえず俺のとこでは期待とおりに動いた。
つか、自分で切り分けもできないのはだめだめだぞ。
-- InitInstanceに追加
DragAcceptFiles(hWnd, TRUE);
-- WindProcに追加
case WM_DROPFILES:
int i, iExitLoop;
HDROP hDrop;
UINT uFileNo;
char szFileName[MAX_PATH];
char szMsg[1024];
iExitLoop = FALSE;
hDrop = (HDROP)wParam;
uFileNo = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
for(i = 0; i < (int)uFileNo; i++) {
DragQueryFile(hDrop, i, szFileName, sizeof(szFileName));
switch( MessageBox(hWnd, szFileName, "Delete", MB_YESNOCANCEL) ) {
case IDYES:
if( CopyFile(szFileName, "c:\\file.obj", FALSE) == FALSE ) {
MessageBox(hWnd, szFileName, "Copy failed", MB_OK);
break;
}
if( DeleteFile(szFileName) == FALSE ) {
wsprintf(szMsg,
"File: %s GetLastError: %ld",
szFileName, GetLastError());
MessageBox(hWnd, szMsg, "Delete failed", MB_OK);
}
else {
MessageBox(hWnd, szFileName, "Delete Success", MB_OK);
}
break;
case IDNO:
break;
default:
iExitLoop = TRUE;
}
if( iExitLoop == TRUE ) break;
}
DragFinish(hDrop);
break;
0065デフォルトの名無しさん
NGNGもとい。「標準的な"Hello,world"アプリケーション」でした。
0066デフォルトの名無しさん
NGNG他のAPのリソースになんでもアクセスできると思うなよ。
http://hp.vector.co.jp/authors/VA003525/tips8.htm
つーか、なんで漏れはこんなとこで油売ってんだろ。自分の勉強しよ。
0067↑そうそう、えらそーに言うほどのことでもない学生は勉強しな
NGNG別プロセスの場合はこうやんだってさ
http://nt.sakura.ne.jp/~miwaki/progtips/process/sharedmemory.shtml
006859
NGNG有り難うございますーー まさにコレですね。 しかし。。でるふぁい;
調度今、逆ギレて他のソフトの小判ざめ辞めて諸々1から作ってやろうと
思い立った所だったのですが、幸いWin98なのでやはり小判ざめで
逝く事にします^;;
#長い事書けませんでした;
006959
NGNG第一引き数がキャスト出来んと叱られてしまいます;
(HANDLE)0xffffffff>'void *' から 'int'
0xffffffff>const unsigned int' から 'void *'
一体何なんだ。。(;´Д`)
007059
NGNG0071デフォルトの名無しさん
NGNGサブクラス化なしでは無理しょ
0072ちゃんと読もうな。>>67
NGNGそれと君は勉強をやめてしまったのか。ま、いいけどな。
007363
NGNGなんか、うまいやり方はないかなぁと四苦八苦してみたんですが
結局サブクラスなんですねー・・・・
どうもありがとうございました。
0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNGコーデックがインストールされてればmciで再生可能。
0076デフォルトの名無しさん
NGNG誰も訂正なんかしていない。VC版でNT付き
ちゃんと読め、というヤツはたいがい自分が読んでない。
>他のAPのリソースになんでもアクセスできると思うなよ。
この逆説的な言い方が幼いというだけ。なんか自分で自分に言い聞かせてる
みたいだ。アンタ自信が初発見だったんじゃないの?
俺もよく答えているが、自信ないヤツほど高圧的なんだよね。
なぜエバる? ま、エバって答えりゃ有難みが増すからかな。
第三者から見ると鬱陶しいので事実を素直に答えといて下さい。じゃ
007776
NGNGどーでもいーね
わりわり、怒るな
0078デフォルトの名無しさん
NGNGどうすればいいのでしょうか。
どなたかご存知の方、教えて下さい。宜しくお願い致します。
0079知ってる範囲では
NGNGGetSystemMetricsでウィンドウ枠の幅を得るとか,,,,,,
008072
NGNGあと、素直に答えなかったのは検索すればすぐ
見付かったからだ。すぐに人に聞くのではなく
もう少し調べて欲しかった。そんだけ。
008178
NGNGこんな API があったんですね。不勉強でお恥ずかしい限りです。
早速やってみます。ありがとうございました。
008236
NGNG考えてくれた方々、どーもありがとー。
てうか、ごめん。
0083デフォルトの名無しさん
NGNGAdjustClientRectEx
WM_NCCALSIZE
なども調べてみよう
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNGそのファイルの名前を変更しようとして失敗すれば使用中。
成功したら元に戻すのを忘れずに。
0087デフォルトの名無しさん
NGNGあたまいーねー
0088デフォルトの名無しさん
NGNGexeやdllがCD-ROM上にあったり読み取り専用で共有されてたり
アクセス権の関係で読取専用だったりしたらどうするつもりなんだろう
0089デフォルトの名無しさん
NGNGなんのために使用中かどうか調べるのか、その目的によっては
Read Onlyも「使用中」とみなしてよいのではないか?
0090デフォルトの名無しさん
NGNGでもCreateDialogIndirectの構造体の作り方がよく分かりませんでした。
テンプレートの詳しい解説サイト無いですか?
0091デフォルトの名無しさん
NGNG質問の条件だけじゃ漠然としすぎてるね。
実際に使ってみてエラーが出るかどうか調べるのが一番確実なような。
0092デフォルトの名無しさん
NGNGDialogBoxIndirect()のサンプルがあるから参考にしてくれ。
http://www.hinaiji.com/quixel/002/
あとはMicrosoft(米国)で下の言葉を検索すればいろいろ見つかるぞ。
http://search.microsoft.com/us/default.asp
CreateDialogIndirect
DialogBoxIndirect
DLGTEMPLATE
DLGITEMTEMPLATE
009390
NGNGなんかえらく難しそうですね・・・。
リソース→メモリイメージ変換ツールというのが見つかったので、
それも参考にしてやってみます。ありがとうございました。
0094デフォルトの名無しさん
NGNGCもC++もWinプログラムも始めたばかりなのですが、
グローバル変数ってありますよね、
どこかのスレで「グローバル変数作りまくるのはダメ」
とか書いてあったので考えてしまったのですが、
例えばある構造体型の変数(オブジェクト?)をグローバルで
宣言してたとして、それをローカルに変え、かつ常に
内容を保存したままにするのは、Windowsプログラムでは
可能なんでしょうか?
DOSのコードならばMain関数内で宣言して使えばいいわけ
でしょうけれど、WindowsだとWinMainだけでなく
ウインドウプロシージャ(ウインドウ関数)がありますよね?
ここに制御が行ったとき、変数は失われたりしないのでしょうか?
バカな質問ですみませんが、よかったら教えてください
0095デフォルトの名無しさん
NGNGちょっと質問の意味が正確にわからないんだが、main()だろうがWinMain()だろうが、プログラムのルールはC/C++と同じ。
だから、ローカル、グローバルの違いもC/C++言語の本に書いてあるとおり。
WinMain()とプロシージャーで同じ変数を使いたいときは、グローバル変数にすれば、両方で使える。
グローバル変数を使いたくなければ、補足ウィンドウデータ(WNDCLASSEX構造体のcbClsExtraやcbWndExtra)を使ってWinMain()からプロシージャーに値を渡す。
プロシージャー内で同じ変数を使い続けるにはグローバル変数かstatic変数を使う。
というか、C/C++を勉強するなら、DOSプログラムから始めた方がいいと思うが。
いきなりAPIは難しい。
009694
NGNGやはりグローバル変数を使うのが基本なのですね。
要は使い分けでしょうか。
>いきなりAPIは難しい
よく言われるんですが、Winで作りたいものがあるので
根性でやってます(汗笑
C/C++の基本的なことにも毎回辞書を引いたりしてるので
遅々として進みませんが・・・。
0097デフォルトの名無しさん
NGNGアホスレの1ならしょうがないけど。
ローカル関数内でのstatic変数も使うな。>>96
WindowsのコールバックにはGet/SetWindowLong使え。
0098デフォルトの名無しさん
NGNG>WindowsのコールバックにはGet/SetWindowLong使え。
WM_CREATE のハンドラでは CreateWindow から戻る前に呼ばれるわけ
だけど、そこでは GetWindowLong できないよね。シンプルな解決法ある?
0099デフォルトの名無しさん
NGNGWM_CREATEで受け取ったら、それをSetWindowLongしとく。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG他スレで議論があったらしいけど、
杓子定規に「○×は使うな、△□を使え!」って論法は危険だと思うぞ。
特に学習の途上なら、
その人のスキルに応じた段階を踏んでいくべきじゃないだろうか。
>>94 はまず、メッセージ駆動によるプログラミングを収得することが目的なわけだから、
初めの一歩としては、それ以外の要素はすべて捨ててもいいと思う。
自分で作ったウィンドウクラスから複数のインスタンスを作るとき、
「なるほど、グローバル変数じゃ、無理だな」と気がつくはず。
そのとき、次の段階へ進めばいいだけ。
■ このスレッドは過去ログ倉庫に格納されています