■過去ログ置き場に戻る■
1-
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
Win32API質問箱 Build47
1
名前:
デフォルトの名無しさん
:2006/11/13(月) 08:56:12
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5
くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn.microsoft.com/library/
)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2
名前:
デフォルトの名無しさん
:2006/11/13(月) 08:57:14
46
ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/
45
ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44
ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43
ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42
ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41
ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40
ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39
ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38
ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37
ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36
ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35
ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34
ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33
ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/
3
名前:
デフォルトの名無しさん
:2006/11/13(月) 08:57:45
32
ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31
ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30
ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29
ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28
ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27
ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26
ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25
ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24
ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23
ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22
ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21
ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20
ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19
ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18
ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17
ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16
ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
★
15
ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
★
14
ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13
ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12
ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11
ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10
ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9
ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8
ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7
ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6
ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5
ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4
ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3
ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2
ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1
ttp://pc.2ch.net/tech/kako/991/991576947.html
4
名前:
デフォルトの名無しさん
:2006/11/13(月) 08:58:22
- MSDN ホームページ
http://www.microsoft.com/japan/msdn/
- MSDN ライブラリ
http://msdn.microsoft.com/library/ja/
- MSDN 2 ライブラリ
http://msdn2.microsoft.com/ja-jp/library/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Google
http://www.google.com/
MSDN ライブラリ 2006年6月版
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=373930CB-A3D7-4EA5-B421-DD6818DC7C41
- Platform SDK Update
(WindowsR Server 2003 R2 Platform SDK Full Download)
http://www.microsoft.com/downloads/details.aspx?FamilyId=484269E2-3B89-47E3-8EB7-1F2BE6D7123A
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/
- Advanced Windows (書籍)
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055
-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&view=table&D=tech
5
名前:
デフォルトの名無しさん
:2006/11/13(月) 09:14:06
勝手に追加
MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
http://msdn.microsoft.com/library/
http://msdn2.microsoft.com/en-us/library/
おまけ;Windows SDK for Windows Vista RC1の文書。
http://windowssdk.msdn.microsoft.com/en-us/library/
6
名前:
デフォルトの名無しさん
:2006/11/13(月) 10:08:02
これも
MSDN ライブラリ 2006年8月版
http://www.microsoft.com/downloads/details.aspx?FamilyID=6671F8DA-B0CB-41DE-AD93-798FC71D344D&displaylang=ja
7
名前:
デフォルトの名無しさん
:2006/11/13(月) 10:21:14
プリンタとFAXを開くのは、
>CreateProcess()で"c:\windows\system32\control.exe printers"をキックる
でできました。
次に、デフォルトプリンタの印刷設定プロパティを開く方法を教えて下さい。
8
名前:
デフォルトの名無しさん
:2006/11/13(月) 12:42:49
>>7
うっきききー!!
(DocumentProperties関数じゃないっけ?)
9
名前:
7
:2006/11/13(月) 12:44:19
DocumentProperties関数でやったところ、Windowsに保存されませんですた。
で、あきらめて、シェルのコマンドラインでWindowsに起動&保存を丸ごとお願いしようかな、と。
10
名前:
7
:2006/11/13(月) 12:45:46
ttp://support.microsoft.com/kb/167345/ja
このソースでやってみましたが、保存されないんです><
11
名前:
デフォルトの名無しさん
:2006/11/13(月) 13:07:25
>>7
またそれか
printui.dll PrintUIEntryでできるんじゃないの?
12
名前:
7
:2006/11/13(月) 13:57:31
>printui.dll PrintUIEntry
ファイル名を指定して実行、で上手く動きません><
13
名前:
デフォルトの名無しさん
:2006/11/13(月) 14:11:37
>>7
rundll32 printui.dll,PrintUIEntry /e /n"(標準のプリンタ名を取得してここに入れる)"
罵倒と煽りは面倒なので省略
14
名前:
デフォルトの名無しさん
:2006/11/13(月) 14:38:09
UNICODE や _UNICODE 定義済でコンパイルされたバイナリ(W系API使ってるって意味?)は
9xでは起動すらしないんでしょうか?
よく「対応していない」って表現されてるんですがもってないのでよくわからないです
15
名前:
デフォルトの名無しさん
:2006/11/13(月) 15:07:05
>>14
CreateFile関数の場合#defineでCreateFileAとCreateFileWを振り分けている。
意図してCreateFileWを利用すると起動時にDLLエラーが出ると思う。
16
名前:
7
:2006/11/13(月) 15:25:20
上手くいきました、有難うございました
>>13
ttp://support.microsoft.com/kb/167345/ja
最後の最後ですが、このソースでPCの設定変更出来た方ありますか?
全然上手く行かないお。
17
名前:
デフォルトの名無しさん
:2006/11/13(月) 15:26:21
複数あるWindowからIEのWindowを絞り出し、そのHTMLDocumentを抜き出すという
事をしたいのですが、その方法で煮詰まっています。
public static bool IECallBack(IntPtr hwnd, IntPtr lParam)
{
StringBuilder sbClassName = new StringBuilder(256);
GetClassName(hwnd, sbClassName, sbClassName.Capacity);
if( sbClassName.ToString().StartsWith("IEFrame"))
{
Form1.al.Add(hwnd);
}
return true;
}
// EnumWindows でIECallBack へさせる。
EnumWindows(new EnumWindowCallBack(Form1.IECallBack), IntPtr.Zero);
こんな感じでWindowのハンドルは取得できるのですが、Window内のオブジェクトを取得する
方法が分からなくて困っています。
どなたかご教授していただけませんでしょうか?よろしくお願い致します。
※板違いだったらすいません。。。
18
名前:
デフォルトの名無しさん
:2006/11/13(月) 15:40:30
>>15
サンクス
9xのDLLはW系をエクスポートしてないってことか
19
名前:
デフォルトの名無しさん
:2006/11/13(月) 15:54:43
>>14
>>18
エントリポイントはあるので、プログラムの起動はできる。
しかし中身がなく、W版関数を呼び出すと失敗となって帰ってくる。
GetLastError()を呼ぶとERROR_CALL_NOT_IMPLEMENTEDが返ってくることがある。
Programming WindowsかAdvanced Windowsのどっちかでは、
MessageBoxWが9xにも実装されていることを使って、RegisterClassが失敗したら
MessageBoxで9xに対応していないというメッセージを表示するというコードを使っていた。
また、Microsoft Layer for Unicodeを使えば、9xでもW版APIを使えるようになる。
実態は文字列を変換してA版APIを呼ぶラッパだったと思う。
20
名前:
デフォルトの名無しさん
:2006/11/13(月) 16:07:12
なんで9XはW系サポートしないの?
あほじゃね?
21
名前:
デフォルトの名無しさん
:2006/11/13(月) 17:03:22
>>17
http://www.google.co.jp/search?sourceid=navclient&ie=UTF-8&q=IE+Iunknown+AtlAxGetControl
22
名前:
デフォルトの名無しさん
:2006/11/13(月) 17:13:35
つまらない質問だが
今画面に
A B C D
と表示されてるとする
設定によってはCとDは不必要なのでSetWindowPos()を使って画面サイズを変更して
見えてる 隠れている
A B | C D
として隠して無かったことにして処理を続けてしまうのはテクニック的に有り?
23
名前:
デフォルトの名無しさん
:2006/11/13(月) 17:15:14
ヒント:ダブルディスプレイ
24
名前:
デフォルトの名無しさん
:2006/11/13(月) 17:23:14
ヒントの意味がわからない
orz
25
名前:
23
:2006/11/13(月) 17:25:42
ごめん、画面の位置を右にして画面からはみ出させるのと勘違いした。
サイズ変更なら大丈夫かも。
変だけど
26
名前:
デフォルトの名無しさん
:2006/11/13(月) 17:33:30
>>23
やっぱり変か・・・
ダイアログベースなのだが
WM_CREATE:のタイミングで設定用ダイアログを出して、
その内容によってメインウィンドウのダイアログの内容を変えるって可能?
27
名前:
デフォルトの名無しさん
:2006/11/13(月) 18:11:30
>>22
俺ならShowWindow(SW_HIDE)で隠す。
28
名前:
デフォルトの名無しさん
:2006/11/13(月) 18:14:51
ダイアログの実サイズってフォント設定によって違うから
動的にウィンドウサイズいじるのは面倒なんだよね。
俺は外見を切り替えるときは、ダイアログそのものを
切り替えるようにしている。
29
名前:
デフォルトの名無しさん
:2006/11/13(月) 18:33:52
>>28
フォントによって表示が変わるのか・・・
エントリポイントでCreateDialog()したダイアログの内容を途中から切り替える方法
もしくはそれ以前に設定値を入力できる方法
ってありますかね・・・?
30
名前:
デフォルトの名無しさん
:2006/11/13(月) 19:13:38
> 9xでW系
MSLU使えばいろいろ問題はあるけど一応動くよ。
31
名前:
デフォルトの名無しさん
:2006/11/13(月) 19:54:49
もう面倒だからCHtmlDialogでいいじゃないか、と。Win32APIじゃないが。
32
名前:
tsurarete yarou.
:2006/11/13(月) 21:54:57
>>20
今時 9x ?
貧乏なの?
33
名前:
デフォルトの名無しさん
:2006/11/13(月) 22:30:46
CreateProsecceでできたプロセスIDから
OpenProsecceでハンドルは取得できないの?
34
名前:
デフォルトの名無しさん
:2006/11/13(月) 22:41:54
>>32
貧乏言うなー!って、俺は20じゃねぇけど、未だに Win98 や WinMe 使ってるヤツって結構居るらしいぞ。
一般的なコンシューマなユーザはウェブブラウザとメーラが使えりゃそれで充分だしなぁ。
で、そういうマシンがボットネットの温床と化していたりもするらしい。
35
名前:
デフォルトの名無しさん
:2006/11/13(月) 23:03:19
名前とかに予防線貼ってあるあたり
余程喰らいつきたかったんだろうから
そっとしておいてあげなよw
36
名前:
デフォルトの名無しさん
:2006/11/13(月) 23:04:51
>>33
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_information_str.asp
CreateProcess が返してくるのはプロセスIDでは無くプロセスハンドル。
37
名前:
デフォルトの名無しさん
:2006/11/13(月) 23:13:24
ウィルス対策ソフトも、9x系は非対応になってきてるしなあ。
早くLinux陣営がそういうユーザを取り込んでくれればいいのに。もっと頑張れ。
38
名前:
デフォルトの名無しさん
:2006/11/13(月) 23:18:36
>>36
あれ、ハンドル??
ハンドルだったの?
確かに、
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
とかって、ゆってるけど、よく見るとハンドル?!
すっげぇ衝撃だ!
39
名前:
デフォルトの名無しさん
:2006/11/13(月) 23:56:32
つっこむところなのか?
40
名前:
764
:2006/11/14(火) 00:13:40
>>22
ChooseColor
41
名前:
デフォルトの名無しさん
:2006/11/14(火) 05:01:55
>>37
最近のLinuxはカーネルだけじゃなくていろんなもんがごてごてしすぎて、
9xの代わりにはならなそう。
42
名前:
567
:2006/11/14(火) 05:53:02
|
|
{ ! _,, -ェェュ、 |
ィ彡三ミヽ `ヽ ,ィハミミミミミミミミミヽ、|
彡'⌒ヾミヽ `ー /ililハilミilミliliミliliミ. |
ヾ、 /iiiiイ!ヾヾミ、ミニ=ー-ミ |
_ `ー―' i!ハ:.:.\\_::::::::::::::/:.|
彡三ミミヽ i! ヽ:.:.:.:冫': : :::/,,∠|
彡' ヾ、 _ノ i!::: ̄二ー:: : ::::ソ ・ ,|
`ー ' {ヘラ' ・_>シ;テツ"''''"|
,ィ彡三ニミヽ __ノ ヽヘ`" 彡' 〈 |
彡' ` ̄ `\ ー-=ェっ |
_ __ ノ {ミ;ヽ、 ⌒ |
,ィ彡'  ̄ ヾミミミミト-- ' |
ミ三彡' /⌒ / ̄ ̄ | : ::::::::::|
ィニニ=- ' / i `ー-(二つ
,ィ彡' { ミi (二⊃
// / l ミii ト、二)
彡' __,ノ | ミソ :..`ト-'
/ | ミ{ :.:.:..:|
43
名前:
デフォルトの名無しさん
:2006/11/14(火) 07:02:52
私鉄?
44
名前:
デフォルトの名無しさん
:2006/11/14(火) 10:07:58
オーバーレイ周りはおいといて
拡張子ごとではなくファイルごとにアイコンが変化しうるものって
.lnk .exe .ico, フォルダ以外にありますか?
また、これのリストを厳密に取得することは出来ますか?
45
名前:
デフォルトの名無しさん
:2006/11/14(火) 10:47:04
はい
はい
46
名前:
デフォルトの名無しさん
:2006/11/14(火) 13:47:34
BMPファイルの読み込みと表示をするプログラム↓
ソース→
http://www.h4.dion.ne.jp/~zero1341/win01/ex13/ex13.cpp
リソース→
http://www.h4.dion.ne.jp/~zero1341/win01/ex13/ex13.rc
ヘッダ→
http://www.h4.dion.ne.jp/~zero1341/win01/ex13/resource.h
このプログラムを動かしたいのに出来ない。
実行できるけど画像読み込みのところで止まる。画像を小さくすればなぜかそのまま
進むけど画像表示されず。
なんで?
47
名前:
デフォルトの名無しさん
:2006/11/14(火) 14:08:39
適当にいってみるとdeleteのタイミングが怪しい
48
名前:
デフォルトの名無しさん
:2006/11/14(火) 14:16:05
delete 後に値参照かましてるな。
|delete pIn;
........
|width=pH->biWidth;
49
名前:
デフォルトの名無しさん
:2006/11/14(火) 14:22:51
そうでした。
47,48の人ありがとう!
50
名前:
デフォルトの名無しさん
:2006/11/14(火) 14:37:36
deleteに[]つけなくていいんだっけ?
51
名前:
デフォルトの名無しさん
:2006/11/14(火) 14:40:09
この場合は結果的にセーフだろうけど… [] つけるべきだろうな。
52
名前:
デフォルトの名無しさん
:2006/11/14(火) 14:46:25
質問者があほしてるんじゃなくて、サンプルソースに非があるケースってのも珍しいな('A`)
53
名前:
デフォルトの名無しさん
:2006/11/14(火) 14:52:38
入力データは用済みってコメントの次の行で使ってるからな・・・
54
名前:
デフォルトの名無しさん
:2006/11/14(火) 18:58:50
配列をnewするようなソースは古い。
55
名前:
デフォルトの名無しさん
:2006/11/14(火) 19:04:21
>>54
STL と WinAPI 相性悪そうな組み合わせだけど、実際のトコロどうなん?
56
名前:
デフォルトの名無しさん
:2006/11/14(火) 19:25:16
このネタスレ違いだろ
57
名前:
デフォルトの名無しさん
:2006/11/14(火) 19:25:20
STLは内部でnewしてるしな
newせず動的にメモリー確保する新しい方法って何だ?
gcnew?
58
名前:
デフォルトの名無しさん
:2006/11/14(火) 19:42:18
おや?アロケータの存在を知っていれば、
「STLは内部でnewしてる」などという(ry
59
名前:
デフォルトの名無しさん
:2006/11/14(火) 20:09:47
黙ってLoadImage使っとけってこった
60
名前:
デフォルトの名無しさん
:2006/11/14(火) 20:34:03
>>55
std::basic_stringが文字列を受け取るバッファに使えないのが痛い。
61
名前:
デフォルトの名無しさん
:2006/11/14(火) 20:51:30
気にせずstd::vector<TCHAR>でGO
62
名前:
デフォルトの名無しさん
:2006/11/14(火) 21:39:16
>>44
他にもいろいろあります。
調べる方法としてはレジストリのDefaultIconキーとshellex¥IconHandlerキーをチェックします。
「DefaultIconキーに%1が*含まれて*いる」もしくは「shellex¥IconHandler キーがあれば」、
ファイル毎にかわるもんだと思っていいです。
63
名前:
デフォルトの名無しさん
:2006/11/14(火) 22:18:24
モーダルダイアログ内でキーボードフォーカスを持つコントロールを調べるAPIってありませんか?
GetFocusはNULLが帰ってくるので・・・
64
名前:
デフォルトの名無しさん
:2006/11/14(火) 22:35:01
>>63
> GetFocus returns the window with the keyboard focus
> for the *current thread's* message queue.
これにひっかかってるとか?
> To get the window with the keyboard focus on the
> foreground queue or the queue of another thread,
> use the GetGUIThreadInfo function.
65
名前:
デフォルトの名無しさん
:2006/11/14(火) 22:35:13
GetFocusだが。
66
名前:
デフォルトの名無しさん
:2006/11/15(水) 04:48:00
1000バイトのファイルがあるとして、先頭の100バイトを削って
900バイトのファイルにしたいんですが、どうやるのが最もよいでしょうか?
お願いします。
67
名前:
デフォルトの名無しさん
:2006/11/15(水) 05:21:10
切り取り線を入れる
68
名前:
66
:2006/11/15(水) 05:36:23
SetFilePointer()で一発でできたらうれしいんですが無理ですよね。
69
名前:
デフォルトの名無しさん
:2006/11/15(水) 06:04:19
読んで書くだけ
70
名前:
66
:2006/11/15(水) 07:32:56
すいません。もうひとつ質問があります。
WriteFileでファイルに書いている際、PCが落ちた場合、元のファイル
がどの程度まで壊れているかの情報ってありますでしょうか?
それとも全部壊れたとみなすべきでしょうか?
少なくとも、すでに存在していたファイルの場合で、そのファイルに
追加書き込みしていた場合、元のファイル分までは壊れてないと
みなしていいのでしょうか?
71
名前:
デフォルトの名無しさん
:2006/11/15(水) 07:51:17
俺には解答が分からないが
俺なら作業用のテンポラリファイル作って、作業が終わったら上書き保存する。
72
名前:
デフォルトの名無しさん
:2006/11/15(水) 08:16:11
ntfsなら壊れない
73
名前:
デフォルトの名無しさん
:2006/11/15(水) 15:58:11
>>66
SetEndOfFile
74
名前:
デフォルトの名無しさん
:2006/11/15(水) 16:02:24
まぁ
その時書いてた部分までは残ってるわな
75
名前:
デフォルトの名無しさん
:2006/11/15(水) 16:34:32
WriteFileしただけじゃ、バッファに書かれただけで、
実際にディスクに書かれてるかどうかは分からんけどナ
76
名前:
デフォルトの名無しさん
:2006/11/15(水) 20:33:07
>>72
NTFSはメタデータのジャーナルしか取らないよ。
だからファイルシステムが矛盾しないことは保証されるけど
ユーザーデータが壊れてないかどうかまではNTFSの関知するところではない
77
名前:
デフォルトの名無しさん
:2006/11/15(水) 20:33:40
>>73
先頭と末尾を取り違えてませんか
78
名前:
デフォルトの名無しさん
:2006/11/15(水) 21:15:05
ホントダー
79
名前:
デフォルトの名無しさん
:2006/11/15(水) 22:12:24
結論:NTFSは屑(pgr
80
名前:
デフォルトの名無しさん
:2006/11/15(水) 22:43:24
_beginthreadを使用しているコードはWM_CREATEを処理する時に_beginthreadを呼び出しているみたいですが、
ウィンドウプロシージャでスレッドを作成しないとダメなんでしょうか。
81
名前:
デフォルトの名無しさん
:2006/11/15(水) 22:47:49
そんなことはない。
そのプログラムではたまたまWM_CREATEのときに作る必要があっただけだろう。
82
名前:
デフォルトの名無しさん
:2006/11/15(水) 22:48:17
>>80
そのサンプルがたまたまWM_CREATEの処理中に _beginthread を使ってるだけ。
基本的にはどこでやってもええよ。
83
名前:
デフォルトの名無しさん
:2006/11/15(水) 23:14:22
>>81
>>82
ありがとうございます。
84
名前:
デフォルトの名無しさん
:2006/11/15(水) 23:43:27
どこでもいいわけではない。
DllMainや一部のコールバックでは制限されている。
85
名前:
デフォルトの名無しさん
:2006/11/15(水) 23:47:55
スレッドで実行してる長いループはちゃんと1000msでSleep呼び出してるのに、
肝心のWinMainがスレッド作成から動いていない・・・何故だ・・・。
86
名前:
デフォルトの名無しさん
:2006/11/15(水) 23:48:11
>>84
ソースきぼんぬ(死語?)
87
名前:
デフォルトの名無しさん
:2006/11/15(水) 23:53:51
きぼんぬ!出た!きぼんぬ出た!得意技!きぼんぬ出た!きぼんぬ!これ!きぼんぬ出たよ〜〜!
88
名前:
デフォルトの名無しさん
:2006/11/16(木) 00:12:05
>>87
俺は限界だと思った。
89
名前:
デフォルトの名無しさん
:2006/11/16(木) 01:14:04
XPまではデスクトップのlistviewのLVITEM.lParamにpidlが入ってたのに
Vistaじゃ入ってない?
90
名前:
デフォルトの名無しさん
:2006/11/16(木) 02:12:00
MSDNにそんなこと書いてあった?
91
名前:
84ではない
:2006/11/16(木) 02:28:16
記憶が確かならCOM関係の本で見かけたような。
具体的にはDLLを動的にロードしたあとDLL側が勝手にスレッドを作ったりして作られたスレッドが走ってる最中にアンロードされたりすると・・・
だったような・・・
・・・でCOMでスレッドを作りたい場合はプロセス内サーバは避けろとかあったような。
(とりあえずEffective COMの項目32で確認)
92
名前:
デフォルトの名無しさん
:2006/11/16(木) 06:40:53
Win32Apiの勉強をかねてVC2005EEでランチャーソフトを作ってます。
ボタンを押し、その状態のままボタン外へマウスをドラッグさせ、マウスのボタンを放すと
ボタンに登録したアイコンを消す。
という動作をさせようと思い "WM_LBUTTONDOWN" / "WM_LNCBUTTONDOWN" /
"WM_LBUTTONUP" / " WM_LNCBUTTONUP" で処理を書いてみたのですが。
どうもメインフォーム上でのみ反応し、ボタン上では反応しませんでした。
ボタンを対象に何かをしなくてはならないとは思うのですが
良い方法が思い浮かびません。アドバイスをお願いします。
93
名前:
デフォルトの名無しさん
:2006/11/16(木) 07:05:11
>>92
SetCapture
94
名前:
デフォルトの名無しさん
:2006/11/16(木) 07:08:52
つ SetCapture/ReleaseCapture
95
名前:
デフォルトの名無しさん
:2006/11/16(木) 07:14:05
>>93-94
ありがとうございます。
早速調べてみます。
96
名前:
デフォルトの名無しさん
:2006/11/16(木) 07:21:25
PtInRegionとの組み合わせで解決しそうですありがとうございました。
.NET Framework 2.0 廃止予定の API 一覧
ttp://www.microsoft.com/japan/msdn/netframework/programming/obsoleteapi/
他スレで見かけたので貼っておきますね。
97
名前:
デフォルトの名無しさん
:2006/11/16(木) 13:48:00
はじめまして、
C++Builderで画像処理ソフトを作っているものですが、
VideoForWindowsで動画をチャプチャしております。
そこで質問なんですが、
1.bmpを介さずに直接メモリにチャプチャする方法
2.動画の描画を行わずに画像を取得(表示すると遅くなるため)
を教えていただけませんか。
いろいろ調べてみたものの解決に至っていません。
DirectShowはちょっと難しかったので使っていません。
どうぞよろしくお願いいたします。
98
名前:
デフォルトの名無しさん
:2006/11/16(木) 14:04:09
?2BP(200)
DirectShowの方が圧倒的に簡単。
99
名前:
デフォルトの名無しさん
:2006/11/16(木) 20:23:43
ttp://wisdom.sakura.ne.jp/system/winapi/win32/index.html
だとCでコンパイルしろっていってるけどC++でWin32APIは使えないの?
このサイトだけでの話?
100
名前:
デフォルトの名無しさん
:2006/11/16(木) 20:28:15
帰れ低脳
使える使えないを語る以前の問題じゃ
101
名前:
99
:2006/11/16(木) 20:33:25
自己解決したわ。そのサイトだけっぽい。
猫のとこなら.cppだったわ・・・
102
名前:
デフォルトの名無しさん
:2006/11/16(木) 20:40:23
絶対、注意書きの意味を理解してないな
103
名前:
デフォルトの名無しさん
:2006/11/16(木) 20:52:20
apiの勉強する前に
C/C++の基本を勉強する方が先みたいだな
104
名前:
デフォルトの名無しさん
:2006/11/16(木) 20:54:59
禿do
105
名前:
デフォルトの名無しさん
:2006/11/16(木) 21:31:53
CをC++でコンパイルするとパソコンが爆発するよ。
106
名前:
デフォルトの名無しさん
:2006/11/16(木) 21:44:09
マジで?やべーな・・・
107
名前:
デフォルトの名無しさん
:2006/11/16(木) 23:47:05
C++を学ぶと頭が禿げると聞いたのですが?
108
名前:
デフォルトの名無しさん
:2006/11/16(木) 23:58:32
そりゃコンパイラ開発者がアレだからなぁ
109
名前:
デフォルトの名無しさん
:2006/11/17(金) 00:01:04
Delphiばかりやってると馬鹿になると聞いたのですが?wwww
110
名前:
デフォルトの名無しさん
:2006/11/17(金) 00:04:01
俺はC++勉強し始めて10年後くらいから薄くなってきた。
111
名前:
デフォルトの名無しさん
:2006/11/17(金) 00:05:38
デルポイ
112
名前:
デフォルトの名無しさん
:2006/11/17(金) 00:17:45
>>110
勉強しなかった場合と比較できないので科学的実験結果としては有意でないと考えられる。
113
名前:
デフォルトの名無しさん
:2006/11/17(金) 12:57:59
カレントディレクトリに指定したファイル名のファイルが
存在するかを調べる関数がありましたら教えてください。
CreateFileとかで失敗したらとかでもできると思いますが、
正規のがありましたら教えてください。
114
名前:
デフォルトの名無しさん
:2006/11/17(金) 13:25:32
SearchPath
FindFirstFile
好きな方でどうぞ
115
名前:
デフォルトの名無しさん
:2006/11/17(金) 15:00:48
普通はopenでやっちゃうと思う。
116
名前:
113
:2006/11/17(金) 15:16:46
>>114
>>115
ありがとうございます。使ってみます。
117
名前:
デフォルトの名無しさん
:2006/11/17(金) 16:39:28
絶対パスを相対パスに変換するAPIがあったら教えてください。
118
名前:
デフォルトの名無しさん
:2006/11/17(金) 16:42:27
PathMakeRelative
119
名前:
デフォルトの名無しさん
:2006/11/17(金) 16:48:43
PathRelativePathTo で出来そうです。
本当にありがとうございました。
120
名前:
デフォルトの名無しさん
:2006/11/17(金) 18:50:32
>>113
PathFileExists というズバリな関数がある
121
名前:
デフォルトの名無しさん
:2006/11/17(金) 19:21:57
>>120
知らなんだー
GetFileAttributes使ってた。
122
名前:
デフォルトの名無しさん
:2006/11/17(金) 23:41:07
おらもだ
123
名前:
デフォルトの名無しさん
:2006/11/17(金) 23:45:50
一応書いておくが、shlwapi.dllの関数で要IE4以上。
124
名前:
デフォルトの名無しさん
:2006/11/18(土) 00:33:17
#pragma comment(lib, "SHLWAPI.lib");
125
名前:
デフォルトの名無しさん
:2006/11/18(土) 01:36:31
shlwapiは便利だね
wsnprintfとかワイルドカードでのマッチングもたしかあの中だったよね?
126
名前:
デフォルトの名無しさん
:2006/11/18(土) 01:40:28
APIらしくGetProcAddressを使うんだよ!
やったことないけどさ
なぜかPath〜系は未だにMSDNが日本語じゃないんだよな
8月版になったからといって更新されるわけもなし
127
名前:
デフォルトの名無しさん
:2006/11/18(土) 01:49:24
ウィンドウズプログラムで質問したい事があります。
ググったのですがいまい解決できそうなページがありませんでした。
作っているのはアナログ時計です。
開発環境はVC++6.0 Proです。SDKで作っています。
丸いリージョンで表示した時計のウィンドウがあります。
ウィンドウのクライアント領域はマウスでドラッグして移動できるように
細工をしております。
アナログ時計のウィンドウをデスクトップ領域の上端より超えて移動すると
ウィンドウのキャプションが隠れるあたりでマウスのボタンを離すと
自動的にキャップションが少しだけ見える位置に移動してしまいます。
ウィンドウのクライアント領域でのマウスの移動が出来るのでできれば
デスクトップの上端から上へキャプションが隠れてもそのままウィンドウが
移動できるようにはできないでしょうか。
よろしくお願いします。
128
名前:
デフォルトの名無しさん
:2006/11/18(土) 02:29:18
>>127
よく分からんけど足りなさそうな情報を質問。
細工ってヒットテストにキャプションって返すやつ?
129
名前:
127
:2006/11/18(土) 02:46:30
ヒットテストでクライアント領域はキャプションとして返してます。
それによりウィンドウのクライアント領域をドラッグしてウィンドウを移動できます。
例えると以上の設定をして、普通のウィンドウのクライアント領域をドラッグして、
ウィンドウのキャプションをデスクトップの上端より隠れるように
ウィンドウを移動させると自動的にウィンドウがキャプションを少しだけ表示した状態に
なってしまうのです。それを移動してキャプションが隠れるようにしたいのです。
130
名前:
デフォルトの名無しさん
:2006/11/18(土) 07:25:34
ダイアログ上にグループボックスを配置し、その上辺に重なるように
チェックボックスを置いています。
表示すると、グループボックスのほうが上に来てしまうんですが、
どうすればチェックボックスを上に持ってこれますか?
たぶんZオーダーの問題だと思うんですが、以下のようにしても
うまくいきませんでした。
SetWindowPos(groupbox, checkbox, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
131
名前:
デフォルトの名無しさん
:2006/11/18(土) 08:01:48
>>130
逆
132
名前:
130
:2006/11/18(土) 10:06:29
逆にしたらできました。orz
133
名前:
デフォルトの名無しさん
:2006/11/18(土) 13:39:41
今読んでる本には
『CreateSolidBrushで得たHBRUSH型変数は、不要になればDeleteObjectで破棄してください』
と書いてあるんですが、その本のサンプルプログラムでは破棄していないみたいなんです。
プログラムが終了すれば自動的に破棄されると考えれば、そのサンプルプログラムが破棄しないのも納得がいくのですが、
自動で破棄されるんでしょうか。
134
名前:
デフォルトの名無しさん
:2006/11/18(土) 13:46:46
プロセスが終了すると、そのプロセスが握っているリソースはすべて解放されるよ
他プロセスと共有している場合は参照カウンタが1減り、0になったらOSにより解放される
現存するメジャーなOSのほとんどはこうなってるよ
135
名前:
デフォルトの名無しさん
:2006/11/18(土) 14:11:19
プロセスが終了するか、DeleteObjectで明示的に破棄しないと解放されないから
プロセスが走ってる間にいくつも作っては捨てをする場合は要らなくなったらDeleteObjectした方がいいね
1個2個作ってそのままくらいなら、プロセス終了時のリソース解放に任せてもいい
136
名前:
デフォルトの名無しさん
:2006/11/18(土) 14:49:31
>>134
>>135
ありがとうございました
137
名前:
デフォルトの名無しさん
:2006/11/18(土) 14:53:20
HFONTからLOGFONT取得って可能ですか?
CreateFontIndirectの逆のことしたいんですけれども
138
名前:
デフォルトの名無しさん
:2006/11/18(土) 15:01:09
GetObject
139
名前:
デフォルトの名無しさん
:2006/11/18(土) 15:04:48
ぉぅぃぇ盲点だった orz
ありがとう
140
名前:
デフォルトの名無しさん
:2006/11/18(土) 15:25:04
>>136
いちおう念を押しておくとWM_PAINTは再描画のたびに呼ばれるからな
141
名前:
デフォルトの名無しさん
:2006/11/18(土) 23:10:31
ウィンドウを作成して、タスクバーにそのウィンドウを表示させないように
したいのですが、どうしたら良いのでしょうか・・・
ツールウィンドウ を使うしか無いのでしょうか><
教えて下さいエロい人
142
名前:
デフォルトの名無しさん
:2006/11/18(土) 23:13:29
?2BP(0)
>>141
不可視のオーナーウィンドウ
143
名前:
デフォルトの名無しさん
:2006/11/18(土) 23:24:28
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html
144
名前:
デフォルトの名無しさん
:2006/11/18(土) 23:27:26
ありがとう
>>142
>>143
解決出来ました。
145
名前:
デフォルトの名無しさん
:2006/11/19(日) 02:24:00
2つのpathが同じかどうか簡単に調べる方法はないでしょうか?
146
名前:
デフォルトの名無しさん
:2006/11/19(日) 02:44:04
GetVolumePathNameとGetVolumeInformationでボリュームが同じかどうか調べて
(同じボリュームでなければ当然同一パスでもない)
GetFileInformationByHandleでファイルIDを比較する。
147
名前:
デフォルトの名無しさん
:2006/11/19(日) 06:06:44
>>145
PathSearchAndQualifyとかPathCanonicalizeが使えないかな?
148
名前:
デフォルトの名無しさん
:2006/11/19(日) 07:32:00
ここかどうか分からないですが
ISUファイルの作り方ってどこかに載っていませんか?
149
名前:
デフォルトの名無しさん
:2006/11/19(日) 07:33:15
>ここかどうか分からないですが
質問がここで良いかどうか分からないという意味です。
150
名前:
145
:2006/11/19(日) 09:27:15
>>146
,147
ありがとう。API調べてみます。
151
名前:
デフォルトの名無しさん
:2006/11/19(日) 09:36:23
>>148
一般的にアンインストール情報ファイルに付加される拡張子、らしいね。
インストーラ作ってるメーカに問い合わせてみれば?
152
名前:
デフォルトの名無しさん
:2006/11/19(日) 10:16:15
インストーラ作ってるメーカーって、ありゃMSインストーラ・・・
153
名前:
デフォルトの名無しさん
:2006/11/19(日) 11:08:39
再起動しないでアンインストールする方法がないかと思いまして。
BATファイルは自分自身を削除できますが、コマンドプロンプトが表示されてしまいます。
154
名前:
Kioo
:2006/11/19(日) 11:22:32
Dialogにあるエディットボックスの内容を入手して、char[]又はstringにいれたいのですが、
どうすればいいのでしょうか
155
名前:
デフォルトの名無しさん
:2006/11/19(日) 11:25:37
>>154
言語は?
156
名前:
Kioo
:2006/11/19(日) 11:34:35
すいません言語書き忘れました。
C++です。
157
名前:
デフォルトの名無しさん
:2006/11/19(日) 11:38:56
そのダイアログってのはどのダイアログなんだ
158
名前:
Kioo
:2006/11/19(日) 11:42:36
RCファイルで作ってあるダイアログで、
IDD_ADD DIALOG DISCARDABLE 0, 0, 240, 75
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT
CAPTION "Form"
FONT 8, "MS 明朝"
{
CONTROL " ID:", IDC_LABEL202, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 12, 12, 45, 6
CONTROL "", IDC_EDIT_ID, "EDIT", WS_CHILD | WS_DLGFRAME | WS_VISIBLE | ES_AUTOHSCROLL, 54, 12, 111, 6
}
IDC_EDIT_IDのエディットボックスです。
159
名前:
デフォルトの名無しさん
:2006/11/19(日) 11:44:45
>>153
DELETE_ON_CLOSE付きCreateFileで
Tmp辺りにアンインストーラをコピーしてそれを起動する、だったと思う。
「アプリケーションの追加と削除」が微妙な動きをした記憶もあるけど(w
そうそう、削除する時は自分のアプリ関連のファイルのみを対象にする事。
誤って他のアプリやデータが入ったフォルダにインストールしていたら、
目も当てられない状態に。というか昔やっちゃったよ orz
160
名前:
デフォルトの名無しさん
:2006/11/19(日) 11:56:24
>>159
なるほど、目に付かない場所に作って後で消すように設定すれば同じですね。
>>158
MFCのCDialogの派生クラスでなら
CWnd* pWnd = GetDlgItem(IDC_EDIT_ID);
char buff[256];
CString str;
pWnd->GetWindowText(buff, 255);
pWnd->GetWindowText(str);
CStringとcharの配列に文字列が入ります。
ダイアログ表示中以外のタイミングですか?
161
名前:
デフォルトの名無しさん
:2006/11/19(日) 12:02:41
>>158
エディットボックスの内容が書き換えられた時に
GetWindowTextLength(GetDlgItem(IDC_EDIT_ID));で文字列の長さを取得
それに+1したサイズで、new char[]なりGlobalAllocなりでバッファを確保
GetWindowTextで文字列を取得する
stringが使いたかったら、さらにバッファからstringへ代入すればいい
162
名前:
デフォルトの名無しさん
:2006/11/19(日) 12:16:40
エディットボックスの入力できる文字数は最大255バイトとか制限あったっけ?
163
名前:
Kioo
:2006/11/19(日) 12:25:51
>>160
今はまだありませんが、ダイアログの下部にボタンをひとつおき、それが押されたら、文字列を変数に入れてダイアログを閉じるようにする予定です
164
名前:
デフォルトの名無しさん
:2006/11/19(日) 12:36:34
GetDlgItemText()ってのもあるよ
165
名前:
デフォルトの名無しさん
:2006/11/19(日) 13:27:57
const int len = GetWindowTextLength(hEdit) +1;
TCHAR* pszText = static_cast<TCHAR*>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len*sizeof(TCHAR)));
GetWindowText(hEdit, pszText, len*sizeof(TCHAR));
// std::string(pszText);
/* 処理 */
HeapFree(GetProcessHeap(), 0, pszText);
半ば定型文
166
名前:
デフォルトの名無しさん
:2006/11/19(日) 13:32:26
あ、stringのとこおかしいや コンパイル通してないから気付かんかったorz
167
名前:
デフォルトの名無しさん
:2006/11/19(日) 13:35:32
コンパイル通さんでも気付くような間違いだがよw
168
名前:
デフォルトの名無しさん
:2006/11/19(日) 14:35:57
>>159
FILE_FLAG_DELETE_ON_CLOSE だったんですね。ちょっと気が付きませんでした。
169
名前:
デフォルトの名無しさん
:2006/11/19(日) 15:49:02
しまった。APIスレなのにMFCで答えてしまった。MFCを使用している場合はこちら。
■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/
170
名前:
デフォルトの名無しさん
:2006/11/19(日) 17:14:47
PlaySoundで.wavを1回でも再生したプログラムを
終了する時についての質問です。
通常の閉じるをクリックしての終了、
右クリックした時にWM_CLOSEを投げての終了はうまくいくのですが、
ESC(WM_KEYDOWN)が押された時にWM_CLOSEを投げての終了が、
ウィンドウが閉じられるまでに、
CPU率が高くなった状態ですこし止まってしまいます。
原因はどこにあるのでしょうか。
PlaySound(NULL, NULL, 0);はいれています。
また、なぜかMessageBeep(MB_OK);を
抜ける直前に挟むと、ちゃんと終了できます。
171
名前:
153
:2006/11/19(日) 17:58:24
>>159
を試してみましたが、作った実行ファイルによるプロセスが先に終了する場合しか
ファイルが削除されません。
何か継承しなければいけないのでしょうか?
172
名前:
デフォルトの名無しさん
:2006/11/19(日) 18:17:21
>>171
FILE_FLAG_DELETE_ON_CLOSE法はうまくいかない。
たぶんみんな試さないで書いてると思う。
漏れが昔ここで聞いた方法
1. rundll32で削除用dllを起動する。
2. 削除用dllからアンインストーラの終了を待って消す。
3. FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す。
(ヒープにPAGE_EXECUTEをつけるのをお忘れなく)
173
名前:
デフォルトの名無しさん
:2006/11/19(日) 19:23:45
>>172
試さないで書くけど FILE_FLAG_DELETE_ON_CLOSE によるサンプル。
ttp://web.archive.org/web/20051123112406/http://www.numeric.co.jp/Win32.htm
174
名前:
デフォルトの名無しさん
:2006/11/19(日) 19:34:50
> このとき、SYNCHRONIZEでオープンし、分身モジュールにハンドルを継承できる
> ようにする。
これがポイントか?
175
名前:
デフォルトの名無しさん
:2006/11/19(日) 19:38:34
>>174
よくわからんけどそれはハンドルを共用するためだろう。
ハンドルは何で共用する必要があるかというと、
分身起動→本体終了→分身により本体削除
のシーケンスを同期をとって実行するため。
176
名前:
153
:2006/11/19(日) 20:04:41
SYNCHRONIZEフラグはNT系のみ使用できるようです。
177
名前:
デフォルトの名無しさん
:2006/11/19(日) 20:31:15
>>173
試してみたけどやっぱり消えないぞ。
むちゃくちゃコードを補う必要があったからどっかでミスってるのかもしれんが
178
名前:
153
:2006/11/19(日) 21:09:01
>>172
3. FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す。
(ヒープにPAGE_EXECUTEをつけるのをお忘れなく)
LPVOID pMem = (LPVOID)GlobalAlloc(GMEM_FIXED, size);
DWORD nID;
pMem = VirtualAlloc(pMem, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// pMemにコードをコピー
CreateThread(NULL, 0, pMem, pMem, 0, &nID);
return:
DWORD WINAPI ThreadFunc(LPVOID pMem)
{
// 待ち処理
// 削除
VirtualFree(pMem);
GlobalFree(pMrm);
return 0;
}
こんな感じでしょうか?
179
名前:
デフォルトの名無しさん
:2006/11/19(日) 21:38:30
> LPVOID pMem = (LPVOID)GlobalAlloc(GMEM_FIXED, size);
> pMem = VirtualAlloc(pMem, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
上のGlobalAllocは何のためにあるんだ?
180
名前:
デフォルトの名無しさん
:2006/11/19(日) 21:38:50
ちょwwwVirtualAllocwwwww
181
名前:
153
:2006/11/19(日) 21:41:02
PAGE_EXECUTEを受け付ける確保がVirtualAllocだけのようなので。
GlobalAllocは必要ありませんでしたか。
182
名前:
デフォルトの名無しさん
:2006/11/19(日) 21:47:50
API以前にC言語の基本からやり直せ
そのレベルじゃ
>>172
のコードを書くのは無理
183
名前:
デフォルトの名無しさん
:2006/11/19(日) 21:55:25
CD/DVD焼ソフトみたいにCD/DVD挿入時の自動再生を
一時的に無効にする方法を教えてください。
OS は Windows MeとXPです。
184
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:01:49
RegisterWindowMessage("QueryCancelAutoPlay");
なメッセージを処理して1を返す
185
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:06:24
俺も新人にCやDOSコマンドを教えた事があるが、理解できなかった時は常に教えた側に
問題があったぞ。
>FreeLibraryしてから自分自身を消すコードをヒープにコピーして呼び出す
この手段に対して何も触れてないじゃないか。
186
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:08:26
>>185
そもそもそんなとこから教えなきゃならん事態が既に間違ってるってことはわかってるか?
187
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:09:13
GlobalAllocで割り当てたメモリが入ってるpMemを黙って上書きしてるのも
教えた側の責任か? それ見てこれ以上付き合う気なくしたんだが。
188
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:10:40
ここはあくまで善意の質問箱であり
プログラム教室ではない
189
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:13:33
×俺も新人にCやDOSコマンドを教えた事があるが、理解できなかった時は常に教えた側に
問題があったぞ。
○俺も新人のときCやDOSコマンドを教わった事があるが、この俺様に理解できなかった
のだから常に教えた側の問題に決まってる。
×この手段に対して何も触れてないじゃないか。
○とっとと手段を教えろよ情報を小出しにしやがって使えねーパソヲタども
つーか本当にそこが問題でできないなら聞き返してさえこない時点でオhル
190
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:15:29
テンプレすら読めない人がデカい顔してるスレはここですか?
>・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
191
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:20:54
GlobalAllocにGMEM_FIXEDフラグを入れれば直接アドレスが返ってくるのも知らんのか。
格下に聞いちまったようだな。
192
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:23:48
触らない方がいいのかな
193
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:28:02
>知らないから答えられません。
って素直に言えばいいのによ
194
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:29:55
知らないから答えられません
195
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:31:15
知ってても答えません
196
名前:
デフォルトの名無しさん
:2006/11/19(日) 22:34:48
本当は知らないんだけど、知らないっていうの癪だから
知ってるけど、教えてやらない。
197
名前:
デフォルトの名無しさん
:2006/11/19(日) 23:12:47
ヒープてことは動的だけど、
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_123.htm
(くメィさん使わしてもらいます)
これじゃないの?やるのは。
198
名前:
デフォルトの名無しさん
:2006/11/19(日) 23:12:58
> GlobalAllocにGMEM_FIXEDフラグを入れれば直接アドレスが返ってくるのも知らんのか。
そんなことぐらい誰でも知ってる。
問題はそこじゃねーよアホ。メモリリークという言葉も知らんのか
> 知らないから教えてください
って素直に言えばいいのに
199
名前:
デフォルトの名無しさん
:2006/11/19(日) 23:17:04
>>197
全然関係ない。
つーか
>>172
でコピー先がヒープであることは本質的じゃない。
別にVirtualAllocでもいいから(むしろMSの推奨はそっちだった気がする)
>>180
が何を笑ってるのかよくわからん。
問題は意味もなくGlobalAllocしてメモリリーク起こすようなコードを平然と書く奴に
手取り足取り教えてられるほど暇じゃないってこと。
つーかコードをメモリ上でコピーするやり方はAdvanced Windowsに載ってるんだから
マジで読んでくれ
200
名前:
デフォルトの名無しさん
:2006/11/19(日) 23:31:39
推奨はVirtualってか、Virtualは仮想メモリに直接確保、Globalはプロセスのヒープに確保じゃなかったかいの?
MSがGlobalよりこっち使えって言ってるのは確かHeapAlloc
201
名前:
デフォルトの名無しさん
:2006/11/19(日) 23:49:05
>>198
嘘吐け、俺が教えてやったから言えるんだろうが。
最初は頭下げてただろうが下衆野郎。しらねーくせに威張ってんじゃねえよ。
>>199
最初から本でも書いときゃ良いだろうがよ。暇じゃない割に2chにへばりついてやがんな。
202
名前:
デフォルトの名無しさん
:2006/11/19(日) 23:54:10
>俺が教えてやったから言えるんだろうが
203
名前:
デフォルトの名無しさん
:2006/11/19(日) 23:58:18
ここでおかしな流れをぶった切って・・・
>>153
WSHなら自分自身を削除できるし、コマンドプロンプトも出ない。
var fso = WScript.CreateObject("Scripting.FileSystemObject");
fso.DeleteFile("c:\\test.js");
これでアンインストーラを作ったことはないがなw
204
名前:
デフォルトの名無しさん
:2006/11/20(月) 00:05:47
>>203
簡易的には使えそう。
どうせならバッチファイルで
205
名前:
デフォルトの名無しさん
:2006/11/20(月) 00:18:02
>>203
98以降には一応装備されているから、バージョンが古いけど簡単な操作なら充分かもしれない。
どうしても駄目なら「BATファイルで御免なさい」ですね。
206
名前:
デフォルトの名無しさん
:2006/11/20(月) 00:27:54
>>200
WinXP SP2から、VirtualAllocでPAGE_EXECUTE付けて、
その領域のコードを実行できるようにせんと
アクセス違反になるんじゃなかったけ?
たしか、バッファーオーバーフローで任意コードを実行されるのを防ぐためとかだったはず。
ただのデータ置き場ならGlobalAllocでもいいけど。
207
名前:
デフォルトの名無しさん
:2006/11/20(月) 00:36:24
>>204
や、バッチファイルだとコマンドプロンプトが出てしまうって話でそ?
まあバッチファイルでも、CreateProcess()でDETACHED_PROCESSで起動すれば
コマンドプロンプトは出ないはず。
208
名前:
デフォルトの名無しさん
:2006/11/20(月) 00:43:53
ショートカットを右クリックして「リンク先を探す」を実行すると、
エクスプローラが立ち上がって、当該ファイルが選択されますが、
これと同じことをするにはどうすればいいんでしょうか?
お願いします。
209
名前:
デフォルトの名無しさん
:2006/11/20(月) 00:57:40
>>201
> 最初は頭下げてただろうが
誰に言ってるの? 頭大丈夫?
> 最初から
>>1
に書いてるが何か?
210
名前:
デフォルトの名無しさん
:2006/11/20(月) 01:00:07
> しらねーくせに威張ってんじゃねえよ。
鏡に向かって話すのが好きなんですね
211
名前:
デフォルトの名無しさん
:2006/11/20(月) 01:02:28
>>206
GlobalAllocでもHeapAllocでもスタックでもVirtualProtectでPAGE_EXECUTEを
付けてやれば実行できるようになる。
当然同じページにある周囲のメモリも巻き込まれるのであまりよろしくないけど
212
名前:
デフォルトの名無しさん
:2006/11/20(月) 01:05:09
> 教えてやったから言えるんだろうが
いやあ仮にそのとおりだとしても
返すものがハンドルだろうがポインタだろうがメモリリークしてることに変わりないし
そもそもGlobalALlocを呼び出す意味自体一切ないと教えてあげてるのに
理解しないばかりか逆切れしてるどっかのバカには負けますよw
213
名前:
デフォルトの名無しさん
:2006/11/20(月) 01:16:20
(´・ω・`) n
⌒`γ´⌒`ヽ( E)
( .人 .人 γ ノ
ミ(こノこノ `ー´
)にノこ(
214
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:11:17
intを戻す関数の中で、return 0;を書く位置が早いとちゃんとreturnされるが、
遅い(関数の最後)だと エラーがでる。
少しずつreturn 0をずらして書いてみると、ある位置より早ければちゃんとreturnされる。
コンパイル時はエラー0となってて実行時に メモリがreadになれませんでした。となる。
関数のなかで、他の関数を呼びまくってるから呼び出し元がどこだったかを忘れてるのでしょうか?
どうすればいいのやら??
215
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:15:57
APIと何の関係もないな
216
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:18:11
んな馬鹿な。単に「他の関数」とやらで落ちているのだろ。
その原因は呼び方の間違いだろうがな。
217
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:27:04
>>216
も同じ意味かもしれんが、returnで落ちるなら
呼び出し規約とかシグネチャが違うとか?
218
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:34:40
a();
return 0; ← 正常に戻る
b();
return 0; ← 落ちる
だと、明らかに b() の中で落ちてるだろ
219
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:37:19
相手してくれてありがとう。
int Kansu{
MessageBox(NULL,"1","めっせじ",MB_OK);
//return 0; //ここならもちろん戻る。
//中略
//中略
MessageBox(NULL,"2","めっせじ",MB_OK); // ここまでの処理は全部やってくれてるのに・・
return 0; //ここで落ちる。"0x33333231"の命令が"0x33333231"のメモリを参照しましただって・・
}
下記のようにダイアログベースのボタんから読んでるだけの超単純なものなのに。
中略部分がややこしいことしてるのでソースは書けないです。
-------------------------------------------------------
case IDC_BUTTON1:
Kansu();
MessageBox(NULL,"もどったよ","よびだしもと",MB_OK);
return TRUE;
-------------------------------------------------------
わからん。 いままでこんなことなかったのに・・。ねるしかないか・・
220
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:37:20
デバッガ使えば
221
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:39:00
デバッガ使い方わかんないです。 messageboxをはさみまくってたしかめる方法でいままでがんばってきました。
お笑いですね。。
222
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:40:21
> 中略部分がややこしいことしてるのでソースは書けないです。
明らかにそこのせいだろ。
>>217
も言ってるが呼び出し規約が怪しい
223
名前:
デフォルトの名無しさん
:2006/11/20(月) 02:41:18
悪いことは言わんからデバッガの使い方学習して来い。
もう一度言うけどWin32 APIぜんぜん関係ないので
224
名前:
デフォルトの名無しさん
:2006/11/20(月) 03:11:27
解決しました。構造体のメモリ確保が1個分足りないのが原因でした。
デバッガは学習してきます。圧倒的初心者のお相手ありがとうございました。
すみませんでした。
225
名前:
デフォルトの名無しさん
:2006/11/20(月) 03:16:17
途中の関数でスタック壊してるんじゃ舞か
そしてとんでもないアドレスにリターンしようとしているのでわ
226
名前:
デフォルトの名無しさん
:2006/11/20(月) 03:22:38
>>224
1回使い方分かっちゃえばめっさ楽になるからガンバレ
227
名前:
デフォルトの名無しさん
:2006/11/20(月) 07:29:04
ウィンドウメッセージの数値から、
WM_**の文字列で取得するAPIがありましたら教えてください。
228
名前:
デフォルトの名無しさん
:2006/11/20(月) 08:10:36
取得するもなにも switch( message ) で case WM_***: やってると思うけど
229
名前:
デフォルトの名無しさん
:2006/11/20(月) 08:20:12
>>184
ありがとうできました。
230
名前:
デフォルトの名無しさん
:2006/11/20(月) 09:40:32
>>227
無いよ。自分で変換テーブル作れ。
231
名前:
227
:2006/11/20(月) 10:06:05
>>228
>>230
分かりました。ありがとうございます。
232
名前:
デフォルトの名無しさん
:2006/11/20(月) 10:10:31
Jeffrey Richter
バッチのサンプル
ttp://www.microsoft.com/msj/archive/SF9C.aspx
ここのW32Q0196.zip
FILE_FLAG_DELETE_ON_CLOSEのサンプル
ttp://www.microsoft.com/msj/0198/win320198.aspx
なぜかダウンロードできない。XPでは不調でした。
233
名前:
デフォルトの名無しさん
:2006/11/20(月) 11:06:10
以前に、EXE自分自身を削除するプログラムを作ることがあって、
いろいろ見つけたサンプルを元に FILE_FLAG_DELETE_ON_CLOSE
を試行錯誤してみたが、うまくいかなかった。
(例) 98系と2000系で挙動が違う (すまん、どう違ったかは覚えてない)
(例) EXEがネットワークドライブ上だとうまくいかない
で、結局、俺は以下のようにした。
(1) 削除用プログラム(自分自身)を「<GetTempPath()のディレクトリ>\DeleteMe.tmp」にコピー
(2) (1)をMoveFileEx( MOVEFILE_DELAY_UNTIL_REBOOT )で削除予約。
(3) (1)をCreateProcess()、自分自身は終了。
(1)はユーザーがリブートするまで消えないが、ユーザーの目に触れなきゃOK!
234
名前:
デフォルトの名無しさん
:2006/11/20(月) 11:10:42
試さずに書くが・・・・・
235
名前:
デフォルトの名無しさん
:2006/11/20(月) 11:12:41
(スマン、234はしくじった)
試さずに書くが・・・・・
バッチ(command.com/cmd.exe)をSW_HIDEでCreateProcessしては?
236
名前:
デフォルトの名無しさん
:2006/11/20(月) 13:03:52
>>233
その方法も良いと思います。
>>234-235
少なくとも ShellExecute ではうまくいきました。
皆さんお世話になりました。お騒がせしました。
237
名前:
デフォルトの名無しさん
:2006/11/20(月) 13:11:39
>>232
参考になりました。
238
名前:
デフォルトの名無しさん
:2006/11/20(月) 20:31:37
メインのGetMessageをまわしているループとは別のスレッドから、
SendMessageでWndProcへ構造体をわたそうと思っています。
wParamか、lParamにポインタ入れて。
この構造体を入れる領域をHeapAllocでとって、そこに値を入れてSendMessageで渡した後、
WndProcで処理した後、HeapFreeで開放してやりたいのですが、
開放するタイミングはWndProcしかないのでしょうか。
WndProcへwParamとか、lParamでわたってくるマウスの情報とかは、
WndProcで開放しないのでなんかお作法みたいなのがあるように思えますが、
なにか標準のお作法がありますでしょうか。
お作法、または、ドキュメントへの道しるべ等お教えいただけないですか。
239
名前:
デフォルトの名無しさん
:2006/11/20(月) 20:36:47
もしかして、SendMessageを呼び出した後は、
イベントがWndProcで処理されるまで戻ってこないので、
−メモリ確保
−SendMessage(ここから投げたスレッドはブロック)
−−メインのGetMessageで取得されて、WndProcで処理される
−SendMessageから戻ってくるのでメモリ開放
といった形になるのでしょうか?
とりあえず、AdvancedWindowsの第26章をみてます。
240
名前:
デフォルトの名無しさん
:2006/11/20(月) 20:43:23
SendMessageで送信したメッセージの処理内でしか使わないのなら
SendMessageから帰ってきたところで消せばいい
ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ
241
名前:
デフォルトの名無しさん
:2006/11/20(月) 20:51:19
>240
>SendMessageで送信したメッセージの処理内でしか使わないのなら
>SendMessageから帰ってきたところで消せばいい
ありがとうございます。
確信がなかったのですが、自信が持てました。
>ちなみにSendMessageはGetMessageで取得じゃなくて、SendMessageが直接プロシージャを呼ぶ
AdvancedWindowsをちゃんとよんでみたら書いてありました。
スレッド間でのSendMessage呼び出しは複雑だと知り、勉強になりました。
ご指摘、ありがとうございました。
242
名前:
デフォルトの名無しさん
:2006/11/21(火) 00:30:29
>メインのGetMessageをまわしているループとは別のスレッドから、SendMessage
する状況なら、
>ちなみにSendMessageはGetMessageで取得じゃなくて、
>SendMessageが直接プロシージャを呼ぶ
は間違いだよ。それは同一スレッドの時限定。
243
名前:
デフォルトの名無しさん
:2006/11/21(火) 01:02:03
でもそんな感じだと思っていて構わないと思う。
Advanced Windows読むまで知らなかった。
244
名前:
デフォルトの名無しさん
:2006/11/21(火) 01:25:56
実は16bitWindowsの頃からGetMessageで取得していた
245
名前:
デフォルトの名無しさん
:2006/11/21(火) 10:07:07
ヘッダ見てるといろんな構造体にbiSizeとかcbSizeとか構造体のサイズを設定するところがありますがこれって何のためですか?
構造体を渡す側はsizeof(構造体)でこのセットするサイズわかるし渡される側も構造体がわかってるからsizeof(構造体)でとれますよね
246
名前:
デフォルトの名無しさん
:2006/11/21(火) 10:23:12
>>245
後で拡張されてサイズが増える場合があるから
247
名前:
デフォルトの名無しさん
:2006/11/21(火) 11:27:43
?2BP(200)
>>245
最後に char hoge[1] みたいな可変長メンバのプレースホルダがあったりして
sizeof では正しいサイズを得られない場合があるから。
248
名前:
デフォルトの名無しさん
:2006/11/21(火) 13:40:05
構造体によっては、コンパイル時の_WIN_VERの値で使用可能なメンバの数が変わったりする
そうなると当然構造体のサイズも変わる
おk?
249
名前:
デフォルトの名無しさん
:2006/11/21(火) 14:27:23
でも、NOTIFYICONDATAとか結構ぐだぐだだよな。
同じ名前を流用するより、
OSVERSIONINFO/OSVERSIONINFOEXみたく、
個別に構造体を定義したほうがスマートに見える。
250
名前:
デフォルトの名無しさん
:2006/11/21(火) 14:31:14
まぁ、俺らがここでそれを言っても
MSがそれに気付いてやってくれないとどうにもならないからな・・・
■過去ログ置き場に戻る■
1-
次250
最新50
DAT2HTML
0.33f Converted.