1 :
デフォルトの名無しさん :
2007/05/11(金) 20:27:08 スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5 くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn.microsoft.com/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2 :
デフォルトの名無しさん :2007/05/11(金) 20:28:47
3 :
デフォルトの名無しさん :2007/05/11(金) 20:29:30
4 :
デフォルトの名無しさん :2007/05/11(金) 20:30:13
5 :
デフォルトの名無しさん :2007/05/11(金) 20:31:09
>>1 乙
>>前スレ997
Delphiスレで聞けよ
API関係無ぇじゃねぇか
とりあえず、整合性が取れてないのはおまいのコーディングが間違ってる可能性が99.99%
前スレ
>>997 Spy++でダイアログの親がTfrmMainってのはどこをどう見て決定したん?
Delphiのフォームは全てトップのアプリケーションウィンドウであるTApplicationに所有されてるはずなんだが
見た目だろw
毎年のことだが、この時期はアホな質問が多いですな
僕バッカー!
デ僕バッカー!
僕バッカー!っデ
何人居るんだよww
僕バッカデー!
17 :
デフォルトの名無しさん :2007/05/11(金) 23:13:30
--、ヽ//彡- ,= '::::, ̄、:::::::::::`:ヽ.、 .,..::彡シ' ` 、:、:::::::::`>=-、_ 今日も明日も ,/シノ ,,__ ```ヽ 、| i ,`ヽ .` ヽ 、 日曜日 /:/ ~` `` `-< | `ヽ、 ..//シ ,, ---、 _,,イi `ヽ、 そしてまた //|| ,i!' ,-=--彡 |.| i .`、 明後日も…… /| `----'' , .|.|/, `、 || / ,,--i .、`--' `- .ノ'' `、 明明後日も… .|| .!=r' .ノ.i , ' `i--'' ., / `i | ` ` '-.' (__,i- '~ 、 ./ ./ .! .>、 .-、 , - ニ⊃ 、 ノ _/ | ./ -ヽ、ヽ、 _`ニ三-' ,,,,,=ニ/~ | | i -='-`- >'  ̄ ̄ ヽ,- ' |' ,- / | | / , '  ̄!-─ / ヽ ヽ _ / ノ | そしてまた ! ' i' ,- | ヽ ヽ /-=ニ-- .| .| `7 _ | ノ- 、 ノ 次の日も `i、 `-i_ , 、 ,>、 , - '` 、 ` | |`i- 、__,,,, , i''i~`ヽ、__,,, -i-- 'i'~i i ヽ | 次の日も / .\ ,ノ | .\ ~ ヽ .|ノノ | ,ノ .| ' ,) ` ヽ、 .|ニ-.' !、 | 次の日も , -`─── '  ̄フ `i .| >-' | i' i' .i-.,--,.- '' ̄` -- 、 ' _, ' , ノ'~ 次の日も ` ``-!-!、」 i'., -, ,_ `──ニフ`──''''''~ . ̄` ^ '-.!、!、 ,、_, -'''''~
ふふふ、決算賞与で40マソ出た俺は勝組。 来月末はその倍ww
自給3000円のバイト見っけた俺も勝ち組
22 :
デフォルトの名無しさん :2007/05/12(土) 06:30:14
GINAってなんぞや
このスレってインテリジェンス検索エンジンなのか?
Graphical Identification and Authentication ってことはGInAが本来の綴りなのか。
意味不明
お前
タスクトレイに登録されてるアイコン一覧を取得するにはどのようなことをすればいいのでしょうか。 できれば、explorerのプロセスが動いてないときでも取得できるように。
FindWindow
GINAはvistaで廃止だっけ
廃止。前スレで既出
>>28 explorerが動いてなきゃアイコンもネェヨ
VISTAで生ソケット扱うのってどうすればいいの?
>>28 理論的には、explorerより先に起動して、
自分がタスクトレイの振りをしてAPIフックかなんかしてアイコン登録を受け付け、
それを本物のexplorerに登録するような挙動をすれば、
自身が稼働中は全てのアイコン操作を把握できるかもな。
実行時の大きさを最大にしたショートカットから起動した時 大きさを変更させないようにするにはどうすればいいでしょうか? WM_SIZEからリサイズしているんですが、どうもWM_SIZEが送られてくる前に最大化されているようですので…
36 :
デフォルトの名無しさん :2007/05/13(日) 15:22:25
CopyFileでネットワークフォルダにあるファイルをコピーしようとしたら ERROR_BAD_NETPATHエラーがでるのですが、下記のコードで何処がおかしいのでしょうか? ::CopyFile( "\\\\testgroup\\testserver\\Backup\\test.txt", "c:\\data\\test.txt", false );
"\\\\testgroup\\testserver\\Backup\\test.txt"
>>36 要は、そんなネットワークファイルネェヨって怒られてんだよ
39 :
デフォルトの名無しさん :2007/05/13(日) 15:38:17
>>37-38 エクスプローラでそのネットワークフォルダにtext.txtをコピーしたんですが
書き方的には↓であっていますよね?
\\グループ名\コンピュータ名\フォルダ名\ファイル名
\\コンピュータ名\フォルダ名\ファイル名
42 :
デフォルトの名無しさん :2007/05/13(日) 15:45:18
>>40-41 ありがとうございます。
コンピュータ名から書けば正常にコピーできました。
>>35 WinMainの第4引数がSW_SHOWMAXIMIZEDだったら
SW_SHOWNORMALに置き換える。
>>42 マイネットワークから目的のコンピュータの目的のファイルが有るフォルダ開いてみりゃパスなんて一目瞭然なんだが
なぜそれを間違えれるのか・・・
ヘッダ
>>45 日本語版の説明の「現在使われていません」の現在は2007年じゃないぞ。
たぶん2000年頃の話。
日本語版ってメンテされてないの?
こういう資料に日付も入れないで「現在」って書くのは微妙だな。 Wikipediaなんかもものすごく時代遅れな記述が堂々と「現在」とか書かれてたりするし。 見つけ次第直してるけど
\\?\c:\hoge\hoge や \\.\c:\hoge\hoge というのはどういう意味でしょう?
それってWin32API関係あるのか?
上はパス名の解析を無効にする 下は「このコンピュータ」
>>46-49 どうもありがとうございます。
このAPI、内部で「マイナーバージョンアップ」しているみたいですね。
VirtualPC上のWin98では最初の引数に非NULLを与えるだけで落ちます。
使うなってことか、もしくはOSの種類によって切り替えろってことなんでしょうか……(^^;
切り替えるしかないだろうね 実行ファイルに互換モードが適用されたりするとさらにカオス
>非NULLを与えるだけで落ちます。 ワロタw 9x対応超がんがれ
57 :
デフォルトの名無しさん :2007/05/13(日) 19:46:09
モニタの電源を切るを作動させるAPIがあった教えて下さい 任意のタイミングでモニタを省電力モードにさせたいです よろしくお願いします
SC_MONITORPOWER
59 :
57 :2007/05/13(日) 21:05:54
GDI+を使おうとしたのですが、 gdiplusimaging.h(67) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません gdiplusimaging.h(67) : error C2440: '初期化中' : 'const char [37]' から 'int' に変換できません。 こんな感じのエラーが121も発生します。 なぜですか?
<gdiplus.h>より先に<windows.h>をWIN32_LEAN_AND_MEANなしでインクルードしている?
>>61 助かりました。ありがとうございます。
気がつきませんでした。
63 :
デフォルトの名無しさん :2007/05/15(火) 02:35:36
mciSendStringで、1回のプログラムで 複数のmidを流す場合、どうすればいいでしょうか。 open hoge.mid → play hoge.mid で再生し、曲を変えるときは stop hoge.mid → close hoge.mid → open foo.mid → play foo.mid とやっているんですけど、CPU率が上がりプログラムが動かなくなります。 戻り値は成功の0が返って来ます。
64 :
デフォルトの名無しさん :2007/05/15(火) 14:31:14
ウォークエリアの幅or高さが200以下になったら、 幅or高さを表示するスクロールバーが現れるウィンドウを作っています。 WM_SIZEメッセージを以下の様に処理したのですが、上手くいきません。 (何がダメなのかというと、ウィンドウサイズが変更されて、 さらにもう一回ウインドウサイズが変更された時に、 スクロールバーが1ターン遅れて適応されるのです。) ウィンドウサイズ変更後、即スクロールバーが現れたり消えたりするためには、 どこをどう直したら良いのでしょうか?? case WM_SIZE: { RECT rt; GetClientRect(hWnd,&rt); LONG style = GetWindowLong(hWnd,GWL_STYLE); if(rt.right <= 200) style |= WS_HSCROLL; else style &= ~WS_HSCROLL; if(rt.bottom <=200) style |= WS_VSCROLL; else style &= ~WS_VSCROLL; SetWindowLong(hWnd,GWL_STYLE,style); } return 0;
>>64 WM_SIZING, WM_GETMINMAXINFOとかかな?
>ウォークエリアの幅or高さが200以下になったら、  ̄ ̄ ̄ ̄ ̄ ̄ 通路?
ワロタw ワークエリアだな。
70 :
64 :2007/05/15(火) 15:59:24
お〜、ちゃんとできましたデス♪
アリガトウございました m(。−_−。)m
>>68 >>69 あはは〜、間違えました^^;)
71 :
デフォルトの名無しさん :2007/05/16(水) 01:31:03
質問! 別のアプリの中のdatagridviewの要素を抜き出すにはどうすればいいの? listviewならLVM_GETITEMだけど、これでは無理でした
72 :
デフォルトの名無しさん :2007/05/16(水) 02:04:43
MCIとかMCIWndとかって、WIN32らしからぬ野暮ったさっていうか、洗練されてないオールドタイプって感じなんだけど 関数とか引数とか・・ なんでなんでしょ? なんか歴史と関係あるの?WINSOCKSみたいな
買収・合併
まるで、win32apiが洗練されてるかのような・・・w
普通のAPIがスイッチ式だとしたらMCIは音声認識だからな。 高度なんだかアナログなんだか
スクリプトに組み込むには使いやすいんだよね‥‥>MCI
ショートカットファイルをその内容にしたがって正しく起動する 簡単な方法ってあるのでしょうか? お願いします。
ダブルクリックする
81 :
77 :2007/05/16(水) 22:57:11
ShellExecuteでできました。 ありがとうございます。
ぐあ・・・緑クロスなんて出るのか。めっちゃ欲しいぜ
くりぺろ ぺたぺた
WM_CREATEにおいて、char配列の中身を全てエディットコントロールに 表示させているのですが、何故かスクロールバーが自動で下までスクロールされません。 //char配列の表示 SendMessage(hLog_s, EM_SETSEL, 0, -1); SendMessage(hLog_s, EM_SETSEL, -1, -1); for(i=0; i<10; i++){ if(lstrcmp(logs[num][i], "*")!=0){ SendMessage(hLog_s, EM_REPLACESEL, 0, (LPARAM)logs[num][i]); SendMessage(hLog_s, EM_REPLACESEL, 0, (LPARAM)"\r\n"); } } return 0; しかし、ボタンを押したときにこれと同じ動作をさせると、 スクロールバーが自動で下に移動し、最後の行が表示される状態になります。 これは何故WM_CREATEだとスクロールしないんでしょうか?
mciSend系で、メモリからロードというのは使えないですよね?
>>84 ボタン時はEM_SCROLLCARETが走るんじゃない?
>>86 WM_CREATE時にスクロールさせることは不可能なのでしょうか?
SendMessage(hLog_s, EM_SCROLLCARET, 0, 0);を追加してみても結果は変わりませんでした。
>>87 なぜ、WM_CREATE時に拘る?
WM_CREATE後半にRDW_INTERNALPAINTとRedrawWindowを組み合わせて
WM_PAINTを呼んだタイミングでいいんじゃね?
GetUpdateRectで更新領域の有無を判定すれば、
簡単なOnInitialUpdate
>>88 WM_CREATE時に拘るわけではありませんが、
そん時に処理するのが一番面倒じゃなくていいかなと・・・。
というよりも、ウィンドウを作成した直後に1度だけ行えばいい処理なので、
WM_PAINT内で処理するのもどうなのでしょうか・・・
EM_LINESCROLLで無理やりスクロールさせることで解決しました。 しかし、何でWM_CREATE時に限って出来ないのかは謎です・・・。
>>90 WM_CREATEはウィンドウを生成する前に送られてくる
>>91 ウィンドウを生成する前にですか。
なら、WM_CREATE時にCreateWindow()で色々作るってのも
何か変な感じがしますけど、まぁそういうものだ、で納得する事にします(´・ω・`)
WM_IME_COMPOSITIONにおいて、if(GCS_COMPSTR & lp)で 現在の編集文字列が習得された、または最新化された時に処理を行えると思うのですが、 これは変換中の文字をBackSpaceで削っていって、最後の1文字を消したときは拾えないですよね? 変換中の文字を削っていって最後の1文字を消した時に処理を行いたいのですが、 どうすればいいでしょうか?
MSNのメッセンジャーとかで、ウィンドウを最小化している時にメッセージを受け取ったら タスクバーのところがオレンジ色にピコピコして知らせてくれると思うのですが、 それはどのようにしているのでしょうか?
つピコピコハンマー
とりあえずFlashWindowEx()だと色が微妙なのですが・・・ あと、ミリ秒指定ではなく、アクティブになるまで点滅させたいです
>>96 すみません、どうやらタスクバーの方はオレンジ色になるようですね。
ミリ秒とカウント設定しても、指定した秒数の最後のほうの一瞬しか色が変化しないのですが
これは何でなんですか?
>>92 わかるわかる。
MFCはOnInitialUpdateがあるから、
そんなこと意識せずにそこで記述するが、
OnInitialUpdateの互換(?)処理が
>>88 だったら、
WM_PAINTは不恰好だよな。
>>96−97 FLASHWINFO構造体の中身あげ
manifestファイルつきのWin32APIオンリーの簡単なテストプログラムを作ったのですが、 Aという名前のフォルダーでは正しく実行できるのに、Bという名前のフォルダーでは実行できません。 Process Monitorで調べてみたら、Aではmanifestを読み込んでいるのに、Bでは駄目。 で、Bのフォルダー名をCにリネームしたらmanifest読み込みました。 逆にAをBにリネームしたら、今度は駄目になった。 なので、Bという名前のフォルダーに何か制限が掛かっているような気もするのですが、 これって、どのあたりのAPIが絡んでいるのでしょうか?
僕ハッカー
僕バッカー!
バカバッカー!
>>99 info.dwFlagsをFLASHW_ALLからFLASHW_TRAYに変更したら正常に動作しました。
しかし、点滅のタイミングというか、点滅の間隔というか、不規則に点滅します。
なんか0.5秒くらい点滅したり、ほんと一瞬だけ色が変わったり・・・
何故でしょうか?一応FLASHWINFOの中身をあげておきます。
info.cvSize = sizeof(info);
info.hwnd = hwnd;
info.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;
info.uCount = 0;
info.dwTimeout = 500;
>>105 FLASHW_TIMERNOFGをFLASHW_TIMER にしてみるとかとかとかとか
>>106 FLASHW_TIMERにしてもやはり、点滅の間隔がおかしいです。
なんかもの凄く気持ち悪いのですが・・・(´・ω・`)
作成したアプリケーションを他のパソコンで起動させたところ、 アプリケーションの構成が正しくないと表示され起動されませんでした。 自分のパソコンでは正常に動作するのですが・・・何が原因なのでしょうか?
>>109 ウィンドウがアクティブになるまで点滅させたいので、Exじゃないといけないような・・・。
>>108 DLLが無いのでは
もしくは、デバッグビルドを渡してたり?
>>111 それはデバッグなしで実行したときにDebugフォルダに出来るexeファイルの事ですか?
まさにそれなんですが、それは実行ファイルとは違うのでしょうか?
>>112 ビルドに何使ってるかわからんが、VC++とかだと
DebugとReleaseを切り替えられる。
Debugは開発環境で動かすものだ。
>>108 つまり、他のパソコンにDLLを入れないといけないという事ですか・・・
あまりそういうのは詳しくないので申し訳ないのですが、具体的にどうすればいいのでしょうか?
>>114 Microsoft Visual Studio 2005です。一応Microsoft Visual Studio 2005がインストールされている
他のパソコンでは正常に動作するのを確認できています。
>>114 Releaseにしてビルドしたらエラーが102個も出てしまいました・・・。
そういう事なのでしょうか・・・。・゚・(ノД`)・゚・。
VS2005を使ってると予想
>>116 プロジェクトのプロパティでいろいろ設定しなかったか?
あれはDebug、Release、共通、の3通りで設定できるんで
Debugだけ追加でライブラリ指定してたりするとはまる
そのあたりではまる人間はVC初心者スレ行きだ
>>115 「プロジェクト」→「プロパティ」→「構成プロパティ」→「C/C++」→「コード生成」
の
「ランタイム ライブラリ」を
「マルチスレッド デバッグ DLL (/MDd)」なら「マルチスレッド デバッグ (/MTd)」に
「マルチスレッド DLL (/MD)」なら「マルチスレッド (/MT)」にしてビルド
#pragma commentで指定する俺は勝ち組
BCBでVCLのスタティックリンクし忘れはしないけどbccのランタイムリンクし忘れで他PCで動かないとかはよくやる/(^o^)\
デバッグ用のDLLは配布禁止(ヘルプのどこかに書いてある)なので注意!!
ごめんなさい、ご飯を食べてました。
>>118 のように、Releaseでリンカ追加したらエラーはなくなり、
他のパソコンでも無事起動させることが出来ました。
ありがとうございます。
でも、他のパソコンでやると何故か変な動作したりするので
これからそれを直そうと思います。Vistaのせいかな・・・。
なんか流れてしまってますが、
>>105 をよろしくお願いします。
気持ち悪いです。
>>126 メッセージループが回らないと点滅しないな、これ。
内部的にWM_TIMER使ってるのかもしれん。
>>100 manifestを読み込んでいるかどうかはどうやって判断した?
>>128 SysinternalsのProcess Monitorです。
>>129 それだ!!! 助かりました、ありがとうございます。
この挙動は仕様なのかな。ってことは、Superfetch絡みですかねぇ。
おぉ久々にためになる情報だ 知らないとハマるなこりゃ
知ってる人は知っていると思うが、 mt.exe(Manifest Tool)を使えば、以前にVS6等で作ったexeに、再コンパイル・リンク無しで mnifestを埋め込むことができるよ。
manifestなんてマンドクセ
SendMessage(hLog, EM_LINELENGTH, (WPARAM)3, 0); EM_LINELENGTHって、第3引数番目の行までのバイト数を取得するんですよね? 上の場合だと、エディットコントロールhLogの3行目までのバイト数を返すんだと思うのですが、 第3引数の数字をいくつに変えても同じ数値が戻ってきます。 これは何故なのですか?
>>134 指定した文字インデックスを含む行の文字数を返す。
>>135 あるサイトの説明によると、
複数行TextBoxにおいて、指定した行インデックスの一つ前の行までのバイト数を取得する
らしいんですけど、行インデックスとは、例えば第3引数に3を指定した場合、
3行目の先頭が行インデックスでいいんですか?
その説明は間違っている。今すぐ忘れなさい。
>>137 Σ(TдT)えぇぇぇぇ!?
では、指定した行までのバイト数を取得するものはないのでしょうか?
EM_GETLINEで1行ずつバイト数足していくしか方法ないですか?
>>138 つ EM_LINEINDEX
指定行の最初の文字の文字インデックスを返す。
どうやらEM_LINEINDEXというのがあるようですね。そのサイトに載ってるのが全部だと思ってました・・・。 とりあえずは解決しました。しかし、エディットコントロール内にどんどん書き足していき、 最大行数を超えると、先頭の行から消していくわけですが、出力する度に エディットコントロールの最上部に移動し、また最下部に戻すためちらついてしまいます。 SendMessage(hLog, WM_SETREDRAW, FALSE, 0);とかしてみたのですが、 全く変わりませんでした。このちらつきを抑えたいのですが、何かいい方法はないでしょうか?
>>139 ありがとうございます。微妙にすれ違いになったようですね(´・ω・`)
そんな変なサイト読まないで、マイクロソフトのドキュメント見ろよ。
>>142 MSDNがなかなか・・・なかなかで。
どうやらちらつく時と、そうでない時があるようです。
また、時々画面に白い横線が入ったりしてて気持ち悪いです。
どのくらい気持ち悪いかというと亜jsふぃじゃ;jfヵfdぁじふぇくらいです。
意味不明
俺最強
俺西京
>>140 WM_SETREDRAWが駄目なら、LockWindowUpdateはどう?
使った事無いけど。
0→"ERROR_SUCCESS" みたいにエラーから名前を取得する機構は無いですかね。
FORMAT_MESSAGE_FROM_SYSTEM
一般に無理
>151 DataGridViewってdotNETの?それならそういうスレに行ったほうがいいと思う。
154 :
デフォルトの名無しさん :2007/05/20(日) 14:13:35
スレ違いかもしれないのですが、どこに書いたらいいのか分からないのでここで質問させてください。 記憶ディスクにセクタ単位でアクセスしたいのですが、 WindowsのAPIだけでそういうことはできるんでしょうか? FAT32でもNTFSでもかまいません。方法があったら教えてください。
SP2から禁止されなかったっけ
157 :
154 :2007/05/20(日) 14:50:52
ありがとうございます。やってみます。
159 :
158 :2007/05/20(日) 14:58:17
>148 LockWindowUpdateは解除したときに、デスクトップ全部の再描画が発生するよ。
winerror.hをreadしてparseしてだな(ry
タスクトレイのアイコンを右クリックして出るメニュー(TrackPopupMenu)の メニューハンドルを取得するにはどうしたらいいでしょうか?
タスクトレイのアイコンを右クリックして出るメニューは自分で作るものだろ?
165 :
163 :2007/05/20(日) 19:50:25
すみません、他のアプリです。
>>163 TrackPopupMenuをAPIフックするとか
メニューハンドルを深追いすると、WinAPIの暗黒に飲み込まれるぞ。
>>166-167 マジですか!?
とりあえず深追いしない程度に頑張ってみます。
ありがとうございました。
ポップアップするまでハンドルって分からないこともあるんじゃ? WM_CONTEXTMENUとかでメニュー生成してたらアウトでしょ ずっとメニューハンドル保持し続けてたらいけるかもしれないけど
対象プロセスのウインドウを片っ端からモニタ。
>>163 popupメニューの操作で起こるActionを
外部からのトリガで実行したいとか言ってた人?
前のスレで答え出てたぞ
SendMessageで WM_COMMANDとメニュー項目のid値なげればおk
id値はspy++でも使って突き止めれば行けるんでは
行けたー━━━━(゚∀゚)━━━━!!!! 情報サンクス愛してる♪
愛されたw
174 :
デフォルトの名無しさん :2007/05/21(月) 16:27:54
愛されたのは俺ですが
僕愛人!
僕ラマンチャ!
(XPの)クラシックスタートメニューでコントロールパネルを展開するにしている時、 コントロールパネルのアイテムの増減が即座に反映されるようにするにはどうすればいいですか? コントロールパネルを開いたら反映されているのですが、アイコンメニューが名前順で並べ替えしないと反映されません。
reboot
ちょw
なのはって頭よさそうじゃん
むやみにコントロールパネルに追加するんじゃありません!めっ!
184 :
デフォルトの名無しさん :2007/05/21(月) 21:33:41
エディットコントロールからデスクトップ等にミドルボタンでD&Dした時 ドロップした位置にファイルを作成するにはどうすればいいのでしょうか
そんな仕様はMSのガイドラインになかった気がする。
IShellFolderからGetUIObjectOfでDataObject作ってDoDragDropかいな?
コンソール非表示のためにmainからWinMainに切り替えたんだが、そうすると 起動時にマウスカーソルが5秒程度砂時計になったままになる 長時間砂時計になるのを防ぐいい方法があったら教えてください
188 :
デフォルトの名無しさん :2007/05/22(火) 02:04:24
ありがとうございました やってみます!
IWebBrowser2でHTMLを表示しています。戻る・進むボタンをつけ、 それぞれのボタンの有効・無効を切り替えたいのですが、 GoBack(), GoForward()が実際に有効かどうか判定する方法が分かりません。 どうしたらよいでしょうか。
190 :
デフォルトの名無しさん :2007/05/22(火) 03:25:07
BCC用に作られたDLLを使いたいのですが、付属の.libファイルがVisualC++で使えません。 こういう場合って、LoadLibraryとGetProcAddressで、明示的にロードして使うしか方法が無いのでしょうか? 関数ポインタをいちいちロードしていくのは面倒なんですが・・・ BCCのように、DLLから.libファイルを作るのって無理なんですかね?
>>187 メインスレッドが応答しないからそうなる。
別スレッドで実行しろ。
>>189 DWebBrowser2インターフェイスでそういうイベントを捕まえられたはず
32767を超えるウィンドウって・・・作れないの? 子ウィンドウ(hCWnd)内では一番底に配置してある部品の座標はright:900、bottom:40000なので、WM_CREATEの最後でMoveWindow(hCWnd,0,0,1000,41000)してある。 にも関わらず、その後に親ウィンドウからGetClientRect(hCWnd,&rt)したらrt.bottomが32767になる。 どーりでスクロールバがまともに動かない訳だ・・・ 32676を超えるウィンドウってどーやって作るの? #まさか出来ん??? って・・・秀○とか・・・そこらのテキストエディタってどーやってんだ? #MFCか?
>>190 名前忘れたがフリーソフトである
要は関数名列挙した.defファイルさえあれば.libは作れるんで、それを自動化したものだと思った
で、話変わるけど、GINA差し替えても「ようこそ」画面は維持できるようにする方法ってある?
1.4までの全APIをMSGINAのスタブにしただけのDLLでもようこそ画面は解除されちゃうんで・・・
>>194 スクロールバーで子ウィンドウをスクロールさせる発想が間違ってる
子ウィンドウでなく描画位置をかえる
>>190 VCなら付属のlib.exeじゃ駄目なのか
>>194 スクロールバー自体が最大32767じゃなかったっけ?
VC++ 2005EEでWin32APIとC++でゴリゴリ書いてるんだけど、 Windowsフォームアプリケーションみたいなボタンとかの コントロールって張れるの?
>>199 どういった意味で言ってるのかわからん。
コントロールをウィンドウに貼ると言うだけなら
普通にCreateWindowすればいいよん。
エディットコントロールならウィンドウクラスは"EDIT"で、WS_CHILD つけて
親ウィンドウを自分のウィンドウにして。
>>196 >
>>194 > スクロールバーで子ウィンドウをスクロールさせる発想が間違ってる
> 子ウィンドウでなく描画位置をかえる
ちょっと書き方が悪かったか。別にhCWndをMoveWindowとかしてないよ。
ちゃんとスクロールバが付けているhCWndの親をScrollWindowExで描画位置を変えてるよ。
#汎用的に使える様に子供として乗せる独自クラスを使っている。
ただ、この方法でなくても・・・↑独自クラス化しない・・・例えば 猫の第100章 SCROLLINFO構造体 の例の
WM_SIZE:のGetClientRectでも32767を超えた値を取れないんじゃないか?
#スマソまだ試してないんだけど^^;
>>199 ダイアログリソース作ってコントロール配置して ::CreateDialog()。
>別にhCWndをMoveWindowとかしてないよ。 なのに、GetClientRectにこだわってるのは何で?
あと、たしかにWindows95/98/Meはウィンドウのサイズの上限は32767だけどね
>>201 それならウィンドウをそこまで大きくする必要は無い
>>198 メッセージとして送られる値はshortだがSCROLLINFOはintまで使える
後は掛けるなり割るなりして描画位置をかえればいい
>>203 > >別にhCWndをMoveWindowとかしてないよ。
>
> なのに、GetClientRectにこだわってるのは何で?
ん?? あれぇ、漏れなんか勘違いしてるかぁ?
描画位置を変えるって、所詮は自分のクライアント領域を上下とか左右にスライドさせている
感覚なのだが…ちゃうんけ?
だからクライアント領域の最大値を最初に SCROLLINFO siとかに設定してスクロールバの位置と表示
されるクライアント領域の位置のつじつまが合う様にしていると思っているのだが…
仮に1000行のテキストがあったとする クライアントには10行表示されたとして そこから50行スクロールさせる 描画位置は51行、そこから60行までの10行を表示させればいい 1000行分のウィンドウサイズはいらない
クライアントエリアの左上は常に 0, 0 なので どんなにスクロールさせようとGetClientRect の値は 0, 0 を起点にした大きさでしか取得できんよ。
>>207 いや、ちょっと待ってくれ。
確かに猫を例にしたのはちょっと悪かったが…
単に文章だけなら、そー言った方法も考えられるんだけど、実際にはクライアント領域には
さまざまなコントロール(ボタンやら)も載ってる訳で…
それらがスクロールバの動きに合わせて見え隠れするってのは、文字列みたいには
ゆかんだろう?
>>208 問題にしているのはrigth/bottomな訳だが…
どこかに良い例文はないかね? orz
>>209 色々貼り付けられている親のクライアント領域に 貼り付けられた子で
「子のウインドウrectを取って 親へScreenToClient する」 なら意味ありそうだが、
「子のクライアントrect 取って」 もしゃーないんじゃないか? ということを
>>208 は言っている。
>>209 OSを書き換える気がないなら、ウィンドウズに頼らずに自前で位置を管理して
見える所のコントロール(+α、tab等でフォーカスが次に移る可能性のあるもの)
だけ正しい位置になるようにすればOK。
あとは適当に表示されない位置に移動or非表示に。
ボタン等コントロールらしきものなどが配置された広大な領域を扱いたい
というだけなら、html ダイアログを作るという手もある。
フォームビューみたいなことやりたいのかな。 そもそも32767までしか作れないというのはどうやったの? 普通に32767超えられるけど。
Sleep()中にマウスカーソルが砂時計になるのですが、 これを矢印のままにしたいです。どうすればできますか? MFCはできれば使いたくありません。
GUIスレッドでSleepすんな
試してないが WM_SETCURSOR で何とかならんか?
MakeSureDirectoryPathExistsって、PCSTRが引数で、 Unicodeビルドするとコンパイルが通らないんですけど、 この関数ってUnicodeのときは使えないものなんでしょうか?
あ、メインスレッドとめちゃってる訳ね
>>214 高さ、幅サイズが32767を超えられるのか?
72dpiで455インチ(1155.7センチ)、96dpiで341インチ(866.14センチ)かー
221 :
デフォルトの名無しさん :2007/05/22(火) 17:59:26 BE:31057128-2BP(222)
>>209 >それらがスクロールバの動きに合わせて見え隠れするってのは、文字列みたいには
同じ事だろ。
>>220 ああごめん、ウィンドウサイズは超えられるけど、クライアントエリアのサイズは32767止まりだったわ
>>218 typedef CONST CHAR* PCSTR;だったはず。
多分デバッガ用のヘルパー関数扱いだったから、
UNICODE版がないんだろうね。
>>218 コンパイルが通らないだけじゃわからない
必要ファイルがインクルードされてないのか
libがリンクされてないのか
WIN95を対象に開発してるのか
色々ある
>>223 TSTR じゃなく STR だし UNICODE版が居ないように見えるね
226 :
218 :2007/05/22(火) 18:11:02
1 番目の引数を 'class CString' から 'const char *' に変換できません。 1 番目の引数を 'const unsigned short *' から 'const char *' に変換できません。 などと出てきます。 今までWindows2000でMBCSのままでやってたときは問題無くビルドできていたけど、 UNICODEに変更したらMakeSureDirectoryPathExistsでずらずらエラーが出ました。 UNICODEでやってる人たちって、この関数に頼ってないということなのでしょうか?
227 :
223 :2007/05/22(火) 18:11:18
>>218 エスパー魔美な俺が一言
SHCreateDirectoryExを使え!
ヘルプに書いてあるなw そうでなくてもPCSTRに変換すれば使えそうだけど
230 :
218 :2007/05/22(火) 18:24:21
MakeSureDirectoryPathExistsを全部SHCreateDirectoryExに置き換えてみます。 ヘルプを呼んでみた限り、 SHCreateDirectoryEx(NULL, パス名, NULL); という呼びかたでいいんですよね? 間違ってたら突っ込んでもらえると嬉しいです。 ありがとうございます。
dll側から自身を終了させる(exeは終了させない)にはどうしたらいいですか? dll側で自身をFreeLibraryしてもexeは普通終了されないのでしょうか?
根本的に考え方を間違ってないか?
233 :
231 :2007/05/22(火) 19:22:48
そうだと思います。 ご指摘お願いします。
>>210 ぐえっ、やっぱりそれかよ…orz
確かに説明わるい。早い話がExcelみたいな画面を作りたいわけだ。
で、もう一度よくよくExcelの動きを見ると…そーかぁ…クライアント領域みたいな物をスクロール
させてる訳では無いかも。枠の線って変化しないで中の数字(文字列)だけが移動しているだけかも(?)
#でも横のスクロールは線も移動してるよなぁ^^;
貼り付けたコントロールも移動させてる感じだね。
了解。やってみるよ。
>>231 良くわからん
FreeLibraryを使った関数使うのはexe側だろ
だったらexe側でFreeLibraryしたらいいんじゃないの?
236 :
231 :2007/05/22(火) 19:55:55
exeは既存の物でdllが自作です。 exeでもFreeLibraryしてますが、それより早く不要になった時点でdllを解放したいのです。
>>236 どうやってLoadLibrary&GetProcAddressするの?
exe側でFreeLibraryしてるなら、勝手にDLL側終了しちゃダメじゃん。 えらいことになりそうな気がする。
239 :
231 :2007/05/22(火) 20:07:18
>>237 特定の関数をエクスポートしていればそのdllをプラグインとして認識するタイプです。
>>238 そうですか。exeの実行時に使用してexeが終了するまで使わないので、
ちょっとでもメモリ消費量なり抑えられればと思ったのですが・・・。
>>239 おまいはDLLのなんたるかを理解していないな
もう使わないことが分かってるなら、exeのほうからFreeLibraryすりゃいいじゃないか。
>>241 dll側のソースだけでどのようにexeのほうからFreeLibraryするか分からないんですが・・・、
すみませんが教えて頂けませんか?
>>242 プラグインとして不要と exe 側のコードを書いた人が判断したタイミングで FreeLibrary を呼ぶ
DLL側のコードを書く人は自前で Load/Free を管理できねー
244 :
231 :2007/05/22(火) 20:57:47
分かりました。ありがとうございました。
>>195 > MSGINAのスタブ
「ようこそ」画面を提供してるのはshgina.dll
Thread動かすタイプのDLLなら、 FreeLibraryAndExitThread という話になるんだよねたしか。
そして、 FreeLibrary(); ExitThread(); すればいいのに、何でこんな関数あるのって話になるんだよねたしか。
248 :
デフォルトの名無しさん :2007/05/22(火) 21:54:05
FreeLibrary(); ExitThread(); すればいいのに、何でこんな関数あるの?
FreeLibraryを先に呼ぶと、ExitThread呼ぶコードがアンロードされて死亡だし、 ExitThreadを先に呼ぶと、FreeLibraryするチャンスがないからだよ、 ってたしか the Old New Things あたりに載ってたんだよねきっと。
なるほど。
子プロセスを特定してヌッ殺す方法を教えてください 明示的に作成したプロセスなら簡単なんだけど、コンソールアプリ起動した時の conime.exeみたいに勝手にくっ付いてる子プロセスを特定する方法が分からない
exe, dll, ico, iclなどから インデックス、サイズ(small/largeだけでなく24とか128も)を 指定してHICONを取得したいと思っています。 IExtractIcon::Extractで希望のアイコンは取得できるのですが 数が多いと動作が遅くて困ってます。 何か他に良い方法ってあるのでしょうか? ご存知の方いたらお願いします。
>>252 エスパーが予想。
IExtractIcon::Extractとは関係ないところで速度低下
>251 自分をJobObjectに所属させれば。
SystemParametersInfoに SPI_SETICONSを渡した場合、 MSDNによれば >システムアイコンを再ロードします。 って事らしいんですけど、 ここで言う「システムアイコン」って何なんですかね? 呼出は成功してるんですけど、今ひとつ実効性というか、 要するにこいつは何をやってくれるんだろうってのが、 はっきり解らないんですけど。 どなたかご存じないですか?
>>234 こんなもん、ちょっとでもコード書いてみりゃ要領がわかるよ
>>256 システムアイコンはメッセージボックスに表示されるアイコン。
?や!や×みたいなの
259 :
256 :2007/05/23(水) 13:44:46
>>258 ありがとうございます!
あれですかー…
どうりで、実行してもぱっと見何も起こらないわけですね。
Win2kの環境で アクティブデスクトップの背景を自分のウィンドウのクライアントに描画したいのですが SHELLDLL_DefView SysListView32 Internet Explorer_Server DeskMover GetDesktopWindow() あたりにWM_PAINTやWM_PRINTをいろいろオプション変えて送っても描画されません。 どうしたらアクティブデスクトップの背景を描画させる事ができますか?
PrintWindow API辺りならなんとかなるんじゃないかな?
マウスカーソルの下のツールバーボタンのコマンドIDかインデックスを取得したいのですがどうすればできますか?
>>261 PrintWindowはXPにはない。
それがアリならVistaとAero有効なPCを買ってこいと回答しておこう
>>264 PrintWindowはちゃんとXPにあるから。
>>265 ごめん「XP以降にしかない」と書こうとして間違えた。
267 :
252 :2007/05/23(水) 23:40:35
>>253 Extract自体ではなくて前後の
COM関係のあーだ、こーだが遅いみたいでした。
>>255 非同期処理ですか、
非同期って全然分からなかったので
試しにマルチスレッドでやってみたんですが
IExtractIcon::Extractが支配的で速度は変わりませんでした。
(自分のプログラムじゃなくてオープンソースを改造してたので)。
上記のマルチスレッドも間違ってると思うので
これを気に勉強したいと思います。
ありがとうございました。
>>267 >
>>253 >Extract自体ではなくて前後の
>COM関係のあーだ、こーだが遅いみたいでした。
よくある話だ、元気出せ。
元気出ました。
俺元気!
サーバークライアント型のチャットプログラミングをやっています。 クライアント側で接続/切断ボタンを超クリックしまくると、時々表示が変になります。 エラーは何も出ないのですが、最前面に出ているのにアクティブじゃなくなって、ウィンドウの一部が消え 背景にあるウィンドウが少しだけ見えるような状態です。これはログウィンドウに大量の文字がある時に起きるっぽいです。 ログウィンドウの最大サイズを3000バイトに制限したら割と正常に動作し、30000バイトにすると上記の不具合が起きます。 ボタンを連打出来ないような仕様にしてもいいのですが、出来ればあまりしたくありません。 どのようにすればいいでしょうか? ちなみに接続ボタンを押すと接続/受信用スレッドが立ち上がり、切断ボタンを押すとスレッドが終了します。
>>271 ログウィンドウはエディットコントロールのおかん
ママー
それは、こっちが聞きたい
つまりだね
質問させて頂きます。 GetOpenFileNameでファイル選択ダイアログを表示し、ファイルを取得しているのですが 何故か、別のモジュール側の処理を少し追加したらダイアログが表示されなくなりました。 原因が全く分かりません…。GetOpenFileNameを利用する上で何か注意しないといけない事があるのでしょうか? コンパイラはBCCとVCの両方で試しましたが、ダメでした。
追加した処理が原因です
その処理を消してみて元に戻るかどうかは試したの?
,.イ´| ̄`ヽr<´ ̄  ̄`ヾ´ ̄ `ヽx''´ ̄「`丶、 / _|ノ ├〈,.-― ;. _ ,ゞ--'、:\___lヽ ,':∨::\ /´ ̄  ̄`ヽ ヽ/´ `ヽ、-.、 \::::::::::', |、_;/ / /´ ,. 、 、 \. \ \―| ’、 / / ,. / / ,ハ ',. ヽヽヽヽ \ヾ/ \_/:/:/:./ , / .,' / // | l | , l: | ', ',. ! l :',!| |/:/::/:/:/:! l | { /|:! l l } !ノ|::,!l | :| |::|:::::::|ノ |:/l/:/:::,|::|:{イ⌒lヾゝ ノノイ⌒lヽ|:::!::}:;!::l::::::/ |::/|/l::/l';:{ヾlー''! lー''!/リノノ/::/:l::/ || |:/リ、|::l;ゞ ̄´´ ,. ` ̄" ハ:lリノノノ' リ |' __,⊥!、 " " r===、 " " /ノノ || '/´\:: : \ ヽーノ /`ーァ-、 ヾ、 _ / li : . ',.`ヽ、 _ ,.イ´ /.ノ::l| ヽ \____ . /'/ |l ヽ `Y´ / './ . :l| |、 / / \l |l, \\_!_/ ‐ ´ 、!| | |\ ̄ | /; ´ ` ‐ , ヽヾ ! \| | / ヽ::/ `ヽ | | ,' ` ', ! 他のスレに貼り付けると . | |::: ヾ ヾ .:| .| おっぱいがポロリする | '、:::.:.. . ― . .:.:::,' ! 不思議なギガバイ子コピペ。 ',. \_:::.: : :_二二二:_: : : : .:.:.:.:::/ ,' ':、 ト、 ̄ ´.:.:.::::::::::.:.:.:.` ―┬ '′ / \ |l ヽ l| / . `/,' ヽ \ ',/ ∧ヽ \ \:.:.:.. ∧
レスありがとうございます。
>>280 さん
はい、戻ります。
追加した処理の内容ですが、実行パスを取得した後に、設定ファイルのパスを作るだけの処理です^^;
メッセージボックスを出す等すると何故か表示されたりします
>>282 エラーコード調べたり、デバッガ使ったり
やる事は色々あるだろ
正直、これだけの情報で答えられるのはエスパーだけだと思う。 せめて追加したコードだけでも出すとか・・
メッセージボックスを出すとうまくいく、というのがなんか引っかかるな。 OPENFILENAME構造体をちゃんと初期化してるか?
レス有難うございます。
追加したコードを記載します。
void GetIniPath( char *p_dis, int size )
{
int point;
GetModuleFileName( NULL,p_dis,size);
// EXE名のスタートポイントを取得
point = GetFilenamePoint( p_dis );
if( point > 0 )
{
p_dis[point] = '\0';
}
wsprintf( p_dis, TEXT("%s%s"),p_dis,INI_PATH);
return;
}
GetFilenamePointでは、for文と2バイト文字、半角カナに注意した比較のみで、APIは全く使用していません
上記のコードで、iniファイルのパスを取得し、ロード処理の前で使用しています。
ロード処理に前にメッセージボックス等、処理を止めるような事をするとたまにダイアログが表示されます。
>>285 さん
別のモジュールでもファイル選択ダイアログを呼んでいましたので
そのコードをそのまま持ってきて使っています。
明るくなったらもっと詳しく調べてみます。
wsprintf( p_dis, TEXT("%s%s"),p_dis,INI_PATH); これって同じ領域指定しても良かったっけ?
だめだめです
だからコンパイルエラーとか挙動不審なのはAPIと関係ないっつーの
1.GetModuleFileName 2.結果をバッファにコピー 3.PathRemoveFileSpecでモジュール名を取り除く 4.lstrcatで"\"と設定ファイル名を追加する (ちなみに3は自作のGetFilenamePointでええんとちゃう?) だめなのか?
std::string strPath TCHAR szAppPath[MAX_PATH]; ::GetModuleFileName(NULL, szAppPath, MAX_PATH); strPath = szAppPath; strPath = strPath.substr(0, (strPath.rfind('\\')+1)); strPath += "[ファイル名]" 超簡単
std::stringのrfindとかってMBCS対応できてるんだっけ?
>>290 3でshlwapi使うなら4はPathAddBackslashとStringCchCatだろ
名前解決を行うプログラムを作りたいのですが、 DnsQuery()はPIP_ARRAYを使っており、DNSサーバにIPv4のものしか指定できません。 DNSサーバにIPv6アドレスを指定できるDnsQuery()または同等なものはないでしょうか? よろしくおねがいいたしますm(_ _)m
getaddrinfo じゃ駄目なの?
hConnect = CreateWindow( TEXT("BUTTON") , TEXT("起動") , WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON , 308 , 10 , 52 , 52 , hwnd , (HMENU)3 , ((LPCREATESTRUCT)(lp))->hInstance , NULL ); こんな感じでCreateWindow()をしているのですが、9番目の引数で指定した数値が 実際にWM_COMMANDに送られて来ず、意図しない数値が送られて来ます。 今は、WM_COMMANDの直後にLOWORD(wp)の値を調べて、その値を拾うことで 対応しているのですが、どうにかして正常な状態に戻したいです。 何故このような事が起こるのでしょうか?原因がわかりません。
LOWORD(wp) の値が 3 じゃないの?
LOWORD(wp)をMessageBoxで表示させたところ6とか見当違いの数字が入ってます。
追記ですが、そのボタンの9番目の引数を(HMENU)30とかに変えると、 LOWORD(wp)に30が送られてきます。これで正常に動作はさせれるのですが、 結局のところ根本の解決になってないのであまり納得が出来ません。
Dialog でかつ WM_INITDIALOG のタイミングで
>>296 をやろうとしてる?
LOWORD(wp)==6 って IDYES 相当なんだが、、、
ちゃんとコントロール作れてないとか
break し忘れているとか
そっち方面な気配がする
#define IDABORT 3 とかぶってるからじゃないの?
Dialogは全く使用していないのですが・・・ あと申し訳ないのですが、3とか6とかいうのは適当でした。ごめんなさい。 数値が被ってるとの原因ででる不具合ならば、正しい数値を書くべきでした。 本当にエラーの出る数値は9〜14で、実際に送られてくるのは50、54、58、62、66です。 これらは for(i=0; i<5; i++){ CreateWindow(,,,,,,,,,(HMENU)9+i,,,,); } で作成しています。また、変数を使わずに直接数値を指定して作成したボタンもあるのですが、 それも違う数値が送られてきます。その数値は正常に動作する別の数値に変えたので覚えていません。
>>302 (HMENU)9 + i じゃだめさーね
(HMENU)(9 + i) でないとあかん
WM_COMMAND の解説ちゃんと読め
>>303 頭悪い間違えですね。ごめんなさい。
首吊ってきます。死ぬ前に、直接数値指定してるのに違う数値が来る時のやつ
調べてきます。
>>292 たぶん対応していないし、第一TCHARを使うんだったら、
std::stringではなく、std::basic_string<TCHAR>を使うべき。
なんかエディットコントロールに文字が増えれば増えるほど、 動作が重くなってくるのですが、これは仕様って事でいいのでしょうか? 特に、winsockの関数周りが遅くなってるような気がします。
308 :
294 :2007/05/24(木) 21:10:12
>>295 レスありがとうございます。
getaddrinfoは名前解決をOSに任せる物だと思っております。
(IPv6アドレスを持った)DNSサーバを指定して名前解決を行いたいです。
>>307 とりあえず、EM_GETHANDLE, EM_SETHANDLEを使って、
標準のハンドルを差し替えたら?
GlobalAlloc(GPTR, メモリサイズ)で当てはめはめて
なお、標準のハンドルは解放するの
んで、通信側かエディット側か判断してみれば?
パパー
よく読めよ。 IPv6レコードではなく、IPv6アドレスしか持たないDNSサーバを扱う話だろ。
312 :
294 :2007/05/24(木) 21:55:11
>>310 「IPv6のレコードを取得する」はできます。
「IPv6のアドレスを持ったDNSサーバに接続する」ができません。
(PIP4_ARRAY)
DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
IPv6でのDNSクエリの発行自体xpSP2でサポートされたばかりだしなあ。
>>312 そのシグニチャはどこから持ってきたん?
Windows CE?
>>312 WinDNS.h見てみたけど無理そうだな。アキラメロ
319 :
294 :2007/05/24(木) 22:31:25
WinDNS.h よりです DNS_STATUS WINAPI DnsQuery_A( IN PCSTR pszName, IN WORD wType, IN DWORD Options, IN PIP4_ARRAY aipServers OPTIONAL, IN OUT PDNS_RECORD * ppQueryResults OPTIONAL, IN OUT PVOID * pReserved OPTIONAL ); DnsQuery_UTF8, DnsQuery_WもPCSTR pszName,PCWSTR pszName以外同じ #ifdef UNICODE #define DnsQuery DnsQuery_W #else #define DnsQuery DnsQuery_A #endif
320 :
294 :2007/05/24(木) 22:33:14
>>317 Vistaならできるはずです。
XPでできないならAPIでも提供されていないでしょうかね?
>>318 自分でDNSプロトコル話すしかないですかねorz
>>320 >自分でDNSプロトコル話すしかないですかねorz
そういう事じゃマイカ?Windowsのリゾルバは糞って有名な話で
dnsapi.dll使う前提なら無理。
>>294 の参照しているのは、2005付属のもので、
最新のWindowsSDKでは宣言が多少変更されたっぽいな。
で、aipServersの所は予約パラメータ扱いに変更されている。
対応するつもりが、面倒で放置したって感じか。
323 :
名無し@沢村 :2007/05/25(金) 05:34:10
256色の画面をクリップボードにコピーして、コピーや貼り付けがしたいのですが、 どのようにすればいいかわかりません。 誰か詳しく教えてくれませんか?
>>323 クリップボード側の話は
ChangeClipboardChain関数, CloseClipboard関数,
CountClipboardFormats関数, EmptyClipboard関数,
EnumClipboardFormats関数, GetClipboardData関数,
GetClipboardFormatName関数, GetClipboardOwner関数,
GetClipboardViewer関数, GetOpenClipboardWindow関数,
GetPriorityClipboardFormat関数, IsClipboardFormatAvailable関数,
OpenClipboard関数, RegisterClipboardFormat関数,
SetClipboardData関数, SetClipboardViewer関数,
などの関数で操作する。
あとそれに合わせてWM_COPYなどがある。
ミソはSetClipboardData関数ですかな?
256色だとパレットも持ってこないとな
326 :
294 :2007/05/25(金) 11:32:09
皆様レスありがとうございます
特に
>>317 の記事大変参考になりました。
DLLをわざわざ開発するくらいですからAPIでは無理ですね。
BIND(dig,host,nslookup,...)のソースなどを参考に時間があるときにでも作成したいと思います。
読み込み違反ってどんな時に起きるんでしょうか? LoadLibraryでDLLを呼び出してDLL内の関数を実行すると、 「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」 となります。そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。
まさにぬるぽ
>>327 デバッグしろよ
「作ったソフトがまともに動きませんどうしてでしょうか?」
みたいな質問が多いけど情報は少ないし、しかもスレ違い
とりあえず、APIと関係なさそうなのは間違いない感じだなw あれじゃね? 渡さなきゃいかん値をNULLで渡してるとか。 渡してるつもりになってる変数が0でしたとか。
>>327 > そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。
どういう意味?
引数の数が一つで、4種類の値しかとらないってこと?
それとも、DLLが複数の関数をエクスポートしていて、
引数が3つのやつは成功するけど、4つのは失敗するってこと?
>>327 わんわん わわわん わんわん わん?
(関数ポインタの宣言がおかしいじゃね?)
>>327 その「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
という分かりやすく簡潔なメッセージの何がわからないのか書いてもらわないと・・・
「アドレス」の意味が分からないとか?
メッセージが分からないとは書いてないぞ
じゃあこれでいいだろ 問い >読み込み違反ってどんな時に起きるんでしょうか? 答え 「アドレス 00000000 に対する読み込み」を行ったとき、等。
( ゚д゚)ポカーン
OSが保護している領域に書き込んだ時 「そのアドレスはらめぇ」とWinに言われてる
読み込みエラーの話をしているのに書き込みの話をし出す馬鹿。
馬鹿馬鹿言うしか能のない馬鹿。
OSが保護している領域を読み込んだ時 「そのアドレスはらめぇ」とWinに言われてる
まぁたぶん今回のはコールバック関数のアドレスとして NULL を渡したとか なんかそんなことだろうね。IP もゼロだし。
>>342 Instruction Pointer。どこのコードを実行するかを格納しているレジスタ。
「アドレス 00000000 で」の部分が当該コードのアドレスを示している。
それはともかくとして、Win32 とかいう以前の話ばかり・・・
レベル低すぎだろいくらなんでも。
この板には初心者スレとか無いのか?
たくさんあります
>>343 レベル低いのはお前の方では?
コールバック関数のアドレスとして NULL を渡したとかそんなレベルの話でないと思われ。
レベルの低い奴はレベルの低い事しか考えられないと思われても仕方ない。
tabcontrolってデフォルトでフォーカスの四角を表示しない機能って ありませんでしたか? もしあったら教えてください。
>>327 >読み込み違反ってどんな時に起きるんでしょうか?
>LoadLibraryでDLLを呼び出してDLL内の関数を実行すると、
>「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
>となります。そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。
とりあえず、考えられるのはこんなとこか?
考察1.まず、LoadLibraryの戻り値はちゃんと値が入っている?
考察2.Unicode版,ANSI版の関数名の問題
引数に文字列を要求している場合はGetProcAddressには明示的に指定しないいけない。
CreateFile→ANSI版はCreateFileA, Unicode版はCreateFileW
考察3.GetProcAddressの戻り値のキャスト先の問題。
多分
>>332 のわんこが云う様にGetProcAddressの戻り値FARPROCの代入先が不完全で、
関数コール時できてない。
考察4.引数が3つの関数と引数が4つの関数は同一ライブラリなのか?
例えばLoadLibraryの実験で、
一般的な引数3つの関数(Kernel32.libのCopyFile関数)で確認したが、
引数4つのFloodFill関数は未チェックでKernel32.libをGdi32.libに直してない。
考察5.ライブラリの位置が巧く取得できてない。
考察6.実は、呼び出し元のアプリケーションはVBで、巧くDeclarできてない。
僕バッカー!
>>345 >コールバック関数のアドレスとして NULL を渡したとかそんなレベルの話でないと思われ。
おそらくそこまでも行っていないレベルの話だと思われ
NULL をコールしてるんだよね、たぶん。
DLL自作なのかな?
353 :
名無し@沢村 :2007/05/25(金) 21:40:29
画面の描画プログラムで、hdcの互換メモリデバイスコンテキストmemdcとmemdc2をつくり、 memdcのほうに黒い線、memdc2のほうに赤い線を描いて、それらをhdcにコピーして 表示するプログラムをつくったんですが、何故かmemdc2のほうの赤い線がWM_PAINTが 送られると消えてしまうんですが、どこが悪いのでしょうか? プログラムはまったく同じようにmemdcとmemdc2の描画とコピーを並べて書いたんですが…?
memdcとmemdc2をSRCPAINTにしてないとか
355 :
デフォルトの名無しさん :2007/05/26(土) 01:08:52
MeteredSection ・パフォーマンスはCriticalSection並で ・セマフォの様にカウンタもあり ・win9x,NT,CEで使える というステキな同期機構があるようなんですが、 MeteredSectionを作成する関数 CreateMeteredSectionをググっても(日本語) ヒット数が数件しかありません これは一般には使われてないんでしょうか だとしたら理由はなんでしょう
そんなに必要じゃないからだろ マイナーだし
>>355 単純にみんなが知らないだけだと思われ。
ってか、自分もはじめて知った
359 :
デフォルトの名無しさん :2007/05/26(土) 01:50:48
唐突な質問すみません。 WAVファイルが使用されているかどうかをチェックするにはどうすればいいでしょうか?
アクセス日時でも調べたら?
361 :
デフォルトの名無しさん :2007/05/26(土) 02:09:16
使用とはつまり今使用中なのかどうかを調べたいのですが、
そのWAVファイルをごみ箱に投函。 入ってくれなければ使用中。以上
さうんどどらいばにおくられているはけいがそのわヴのものならしようちゅう。いじょう。
スレ違いでしたら誘導をお願いします CreateProcessで作成したプロセスを安全に終了させたいと思っています。 メッセージループを持っているプロセスならWM_CLOSEで事足りるのですが、コマンドラインアプリケーションの場合はどうすればいいのでしょうか? たとえばpingの場合control-Cを送れば終了できるんじゃないかと思い、パイプを作成してETXを送ったのですが終了できません。 また、command.comのプロンプトはCR(control-M)でちゃんと改行と処理されるのですが、パイプを通した場合はLFCRを送らなければ認識されません。 パイプの処理に関して何か根本的な勘違いをしているのでしょうか?
>>364 どういう使い方してるの?
ウチの環境ではpingし終わったら勝手に閉じるけど?
command.comってことは98・・・か・・・?
シグナルを送るんだよ
>>364 安全に終了させる汎用的な方法は無い。
WM_CLOSEで終了したとしても、それが正規な終了方法でないアプリがあるかもしれない。
結局各アプリを解析して、個別の対応を採らなければならない。
ウィンドウクラスのとこで winc.hIcon = LoadIcon(NULL , (LPCSTR)IDI_ICON2); で、アイコンを指定しているのですが、何故かふきだしに i マークがついたアイコンになります。 リソースに自分で作成したICONを追加もしているのですが、何か上の式は間違ってるのでしょうか?
>>371 ああああありがとうございます(泣)
NULLをhInstanceにしたらアイコンが変わりました!
ぬるぬる
ぽぽ
>>364 GenerateConsoleCtrlEvent
375 :
364 :2007/05/26(土) 19:25:12
>>365 現在親プロセスからコマンドラインアプリケーションを起動して標準出力を拾っているのですが、親プロセスを終了したときにそのコマンドラインアプリケーションを安全に終了させたいのです
>>367 拝見したところパイプの接続は私のテスト環境と同じようで、子プロセスの終了も親からでは無くping同様に子プロセスのChild.EXEが勝手に終了するのを待つだけのようでした。
>>369 起動させるプロセスは限られていますので私も個別に対応したいと考えています
たとえばCOMMAND.COMならば'EXIT'を送れば終了でき、pingならばctrl-Cで終了できるはずです。
しかし前者は成功するのですが、後者は失敗しました
パイプでは制御コードを送れないってことはありませんか?
>>364 ちょっ話変わるけど、
コンソールリダイレクトの想定先は何?
例えば、コンパイラのキッカーみたいなもの?
バッチ処理の結果を取得したい為?
自作アプリケーションにXPスタイルを適用しつつ 一部のコントロール(ステータスバーなど)のみをXPスタイル以外ってできないのかな?
379 :
355 :2007/05/26(土) 20:15:21
>>356 >>357 >>358 ありがとうございます
MSDNの記述を読む限り、とても有用な機能だと思ったんですが
何でマイナーになってるんでしょうね・・・
>>379 自分で作らにゃならんし、メンテナンスや互換性を考えると面倒くさいからでしょ
>>383 心配しなくても無視されないよ。
パイプを作ってCtrl-Cを送ってもどうせ効かないから。
逆にパイプのデータ経由で死ねるなら、 パイプはバイナリデータを送れない、という話になる
その理屈はおかしい
387 :
デフォルトの名無しさん :2007/05/26(土) 23:57:14
ドラッグドロップとImageListについて質問です。 DropTargetの側で ImageList_BeginDragやImageList_DragMove等のAPIを使って ドラッグ中の画像を作るのは邪道でしょうか? 実際動いてはいるんですが。 やはりDropSourceの方でやるものなのでしょうか。 あと一つ、 ImageList_BeginDragで始まったあとに 表示されている画像を変更することはできないんでしょうか。 ImageList_Replaceは動作しませんでした。
ども。
>>364 です
>>376 ちょうどそんな感じです
>>383 ご指摘ありがとうございます。完全に見落としていました
>>374 私が探していた方法はまさしくコレです
コマンドラインアプリケーションにもちゃんとExitProcessが標準で実装されていたんですね
プログラム側で入力シーケンスを監視してctrl-C信号を拾っているんだと思っていました
色々とありがとうございました。
390 :
387 :2007/05/27(日) 00:39:55
自己解決しました。 同スレッドからD&Dされると挙動不審になるみたいです。 別スレッドからなら(一見)問題ないみたいですが。 止めることにしました。
391 :
デフォルトの名無しさん :2007/05/27(日) 02:35:12
猫でもわかるプログラミングってどこにあるんですか?
「猫でも」でぐぐれ
本屋に有る
394 :
名無し@沢村 :2007/05/27(日) 08:40:17
hdc=GetDC(hwnd); memdc=CreateCompatibleDC(hdc); memdc2=CreateCompatibleDC(memdc); hBita=CreateCompatibleBitmap(hdc,maxX,maxY); SelectObject(memdc,hBita); SelectObject(memdc2,hBita); PatBlt(memdc,0,0,maxX,maxY,PATCOPY); PatBlt(memdc2,0,0,maxX,maxY,PATCOPY); で、後にSelectObjectしたほうのmemdc2がうまく作成されてないようなのですが、 (hdcにコピーして再描画すると消えてしまうので) memdc2をうまく作成するにはどうしたらいいでしょうか?
ダイアログを、呼び出したアプリケーションのフォームの最前面に表示したいのですがどうすればよいのでしょう? WS_EX_TOPMOSTや、SetWindowPosでHWND_TOPMOSTだと、他のアプリの前面にも出てしまいます。 あくまで呼び出したアプリの最前面にしたいのです。
WM_OVERLAPPED & WM_CHILD & WM_POPUP
397 :
395 :2007/05/27(日) 11:10:18
失礼しました。 DialogBox関数の第3引数がうまく設定できていないのが原因でした。 お騒がせしました。
>>394 そのSelectObjectは何かのギャグか?
400 :
名無し@沢村 :2007/05/27(日) 12:52:00
>>399 つまり描画用のデバイスコンテキストを複数つくることはできないということですか?
ペイントソフトのアンドウリドゥとかはどうなっているんだろう?
メモリデバイスコンテキストを複数つくれば、そこにコピーして待避させておいて、簡単に実装できるんだけど…
逆にビットマップを複数作ればいい
402 :
名無し@沢村 :2007/05/27(日) 12:58:04
私がつくりたいのは、 例えば赤と黒で画面に線を描画して、 あとから赤の線だけを消して、赤の線の下に引かれている黒い線もちゃんと復元できるようなソフトなんですけども… 黒い線と赤の線を別々のデバイスコンテキストに描画すれば簡単だと思ったんですがテ…
操作履歴があるなら、それをもとに 「ファイルを開く」から復元できるやろうが。
例えば、同じビットマップを複数のDCに選択できたとしたら、 片方のDCに書き込んだ内容はもう片方のDCでも同じ内容になるだけだが・・・ なんでビットマップを複数作ルことを思いつかないんだ?
405 :
デフォルトの名無しさん :2007/05/27(日) 14:23:49
熾烈な首位争いを繰り広げる、日本とハンガリー。
日本は現在ハンガリーに500万クリックほど差をつけているものの、
これで安心してはいけない。
我々のこれまでの最大クリック速度は8万〜9万回/分が限度だが、
ハンガリーはなんと13万回/分を叩き出した実績がある。
実際、1400万の差を一晩でひっくり返されている。
今はハンガリー時間で7時を過ぎたところ。
彼らの動きが活発になり始めるころだ。
おまけに月曜日は祝日だという確定情報もある。
今の戦力では心もとない、まだまだ戦力を募集中だ。
もはやVIPPERだけでは太刀打ちできない。
これはもはや、VIPの枠を超え、2ch全体で立ち向かう以外に勝機はない。
諸君の参戦を切に願う。
現行スレ
【首位奪還】一番クリックした国が優勝 Click82【天王山の決戦!!】
http://wwwww.2ch.net/test/read.cgi/news4vip/1180241158/ まとめサイト
http://www33.atwiki.jp/clickvip/
>例えば赤と黒で画面に線を描画して、 >あとから赤の線だけを消して、赤の線の下に引かれている黒い線もちゃんと復元できるようなソフトなんですけども… レイヤーのことだろうか?
この手のは、BitBltをパワーアップさせて、転送先や転送元に、 HDCだけじゃなくHWNDやHBITMAPも渡せるような 関数を作っておくと楽かな。
>>402 スレ違いの回答になるが・・・・
Undo/Redoをやりたいなら、ビットマップレベルで履歴を保存するより
描画内容(座標・色・線種など)で履歴を保存するほうがいいと思うよ。
質問です。F1を押したときにある動作をさせたいのですが、 ウィンドウプロシージャでWM_KEYDOWNでメッセージを受け取る事が出来ません。 起動した直後は出来るのですが、その後、エディットコントロールにフォーカスを移動した時とかに メッセージを拾う事ができなくなります。エディットコントロールやボタンにフォーカスがある状態でも メッセージを受け取るにはどうすればいいのでしょうか?
キー関係のメッセージははフォーカスを持つウィンドウに送られる メッセージをDispatchする前に、アクセタレータを使うなり何なりすること。
ごめtypo *アクセラレータ TranslateAcceleratortとかHACCELとかのことです
HP見ながら頑張ってみたのですが、上手くいきません。 肝心な部分だけ書いてみました。どこかいけないところはあるでしょうか? //aaa.rc IDR_ACCELERATOR1 ACCELERATORS BEGIN VK_F1, ID_MYHELP, VIRTKEY, NOINVERT END //resource.h #define ID_MYHELP 40001 //aaa.cpp WinMain(){ haccel = LoadAccelerators(hInstance, (LPCSTR)IDR_ACCELERATOR1); } WndProc(){ case WM_COMMAND: if(LOWORD(wp)==ID_MYHELP) MessageBox(); return 0; }
LoadAccelerators(hInstance, MAKEINTRESOURCE(IDA_ACCEL1)); とか TranslateAccelerator(hwnd, hAccel, &msg) 抜けとかかなーといってみる
TranslateAcceleratorは? あと、(LPCSTR)IDR_ACCELERATOR1よりもMAKEINTRESOURCE(IDR_ACCELERATOR1) LOWORD(wp)よりもGET_WM_COMMAND_ID(wp, lp)お薦め
>>413-414 TranslateAccelerator()を入れたら動作しました!
大事なところを見逃してました。ありがとうございます。
416 :
名無し@沢村 :2007/05/27(日) 20:39:52
>>404 >なんでビットマップを複数つくることを思いつかないんだ?
memBit1=CreateCompatibleBitmap(hdc,x,y);
memBit2=CreateCompatibleBitmap(hdc,x,y);
のようにでしょうか?
表示用のデバイスは1つ(hdc)しかないので、ちょっと無理っぽい気が…
なんで見えない番号があるのかと思ったら なつかしいな沢村
TranslateAcceleratorは
>>411 でわざわざ言ってあげたのにな
419 :
名無し@沢村 :2007/05/27(日) 20:47:02
>>408 描画内容(座標、線種、色)を数値データとしてスタックに保存するのでしょうか?
データを画面に復元するときはどうすれば?
思い付くのはSetPixcelですが、
SetPixcelで1点ずつ画面に点を打っていくのでは、時間がかかりすぎるような気が…
420 :
名無し@沢村 :2007/05/27(日) 20:52:27
>>417 なつかしいな。
プログラミングは当分休止。つーかいまプログラミングしてるけど…
いま投稿用の漫画描くためのソフトつくろうと思って質問しまくっているとこ…
これができたら、プログラミングはお休みして漫画に専念する。
>>419 既にAPIの質問ではないと思うが
基本的な方法としては、
1、画像そのものを最初にどこかに保存しておいて
2、描画時に使ったコマンドの内容を保存しておく。 点を打った、線を引いた、円を描いたというようなね。
そして、巻き戻すときは、1から順にコマンドを再現して、一つ手前で止めればいい。
WM_CHARメッセージで、送られてきた文字を取得することは可能なのでしょうか?
>>422 お前が手の届く範囲にいたら殴りたい。
なんで訊く前にちょっと調べてみないわけ?
ほんの少し調べれば分かることなのに。
本人にとって、2chで聞く=調べる、なんだろうな お前の手の届く範囲にはディスプレイがあるだろうから代わりにそれでも殴っとけ
いえ、質問の仕方が適当すぎました・・・。 WM_CHARのwpに入ってるっぽいのですが、その取り出し方がわかりません。 MessageBox()で表示させようと、(PTSTR)&wpにしても、文字コード取得しようとして(int)wpで見てみても なんか全然変な値が入っててわけわかりません。
あのさあ、ちゃんと調べてんの? ぐぐっただけで詳しい使い方なり情報なりわんさか出てくるんだが。 TranslateMessageはちゃんと読んでんよな? だったらWPARAM型のwpにキャラクタコードが入ってるんだが。 ちなみにキーコードじゃないぞ 俺も殴りたくなってきた
殴るなら俺を殴れ
>>419 SaveDC, RestoreDCじゃダメか?
>>425 Cの文字の扱いをまるで理解していないと見た。
いえ、殴るなら僕を殴って下さい。それはそのはず、入ってるわけがありませんでした。 WM_COMMANDで拾ってそのパラメータからWM_CHARの処理やってたので、 そのままWM_CHARを捕まえたような気分になってました。
432 :
412 :2007/05/27(日) 22:57:40
>>412-415 これでF1はどこにカーソルがあっても機能するようになったのですが、
F2、F3は機能しなくなりました。F2、F3等は、あるエディットコントロール内にカーソルが
ある時のみ有効にしたくて、F1だけ特殊な感じでした。これはF2、F3とかも
アクセラレータに持っていかれてしまってるせいなのでしょうか?
>>431 すみません、俺が悪かったです。もう名乗りません。
違う方法でなんとか解決できたのでなんとか出来ました。
>>433 だーかーら、名乗りもせず「俺が」なんて言うな、っていってんだよ
>>430 です、くらい書けよ
誰だかわからんだろう
いえ、それは俺です。
だから俺が俺なんだって 勝手に人の名前騙るなよ
>>412 もしかして: WM_HELP
なんか、ID_MYHELPとか書いているし。
440 :
412 :2007/05/28(月) 00:02:55
>>439 いえ、WM_HELPではありません。まぁ同じなんですけど、
F1ボタンを押したら自分で作ったヘルプのウィンドウが出るようにしています。
それはいいんですが、F2〜F8にもその他の機能を用意していて、
あるエディットコントロールをサブクラス化してそのプロシージャで
WM_KEYDOWNで拾っているのですが、それが機能しなくなりました。
F1だけをアクセラレータで変にやったせいなのでしょうか?
>>420 コミックスタジオでも買った方が良いぞ
あ、マンガ描くためのソフトから作ったのを作品の
ネタにするのなら恐れ入る
442 :
名無し@沢村 :2007/05/28(月) 00:16:43
突然ですが、2つのメモリデバイスコンテキストを合成して描画することに成功しました。 黒い線の画面のほうをBitBltのSRCANDで画面にコピーし、 赤い線の画面のほうをSRCCOPYで画面にコピーしたら、 再描画をかけてもどっちの線も消えませんでした。 ただ、この方法だと、赤い線も黒くなってしまうようです… 赤い線が黒くならないようにするには、どうしたらいいのでしょう? いくつも組み合わせがあるので、全部ためすのは、気が遠くなるほど時間がかかりそうなので…
組み合わせとは何の組み合わせ?
ねむい
質問です。 CでWindowsプログラム作るため、Win32APIを学ぼうと思っていろいろ調べている途中で気になったことがあります。 テンプレのWin32 API入門というサイトではWin32API学ぶ上で、 windowsの知識とアーキテクチャの知識が必須だと書かれていました。 そこで、「コンピュータの構成と設計」「アーキテクチャ徹底解説MicrosoftWindows2000・・・」 などの書籍でコンピュータアーキテクチャについて学んだ方がいいのでしょうか? お金に余裕がないので無駄な出費は避けたいです。 ちなみに私は、基本情報技術者試験の知識とCの入門書の知識くらいしかもっていません。 御回答よろしくお願いします。
パソコン初心者でもなければ別に要らないと思う
いらん
その程度は、Win32APIを色々試しているうちに自ずと判ってくるから要らない。
449 :
445 :2007/05/28(月) 01:09:36
>>446-448 御回答ありがとうございました。
ではこのままWin32APIの学習に入ろうと思います。
Windowsプログラムを作るためならば、APIから学ぶのは止めたほうがいい。 実際開発では窓とかはフレームワーク任せだからな。それで問題ない。 ど〜しても、変態的な非効率な開発を求めるならAPIから始めることを止めはしない。
>>449 >>450 の意見と思いっきり逆のタイトルですまんが
APIで学ぶWindows徹底理解
http://www.amazon.co.jp/exec/obidos/ASIN/4822228266 この本はまじでおすすめ。
雑誌連載のムック化だから、それぞれのトピックは完全に独立してて
一つ一つ段階的に学習していく、って使い方はできない(想定されてない)けど、
それぞれに読み応えがあるし、なにより文章がとても上手くて面白い。
内容はタイトルどおりで(「徹底」はちと言いすぎか)、
APIの使用例を通してWindowsの仕組みや叩き方が結構クリアに見えてくると思う
ただし、Cの基礎が分かっていることが条件。
あとソースはBCC用だがVCのことも全体に渡ってちゃんと配慮して書かれてる
まぁ服毒本として興味があればどうぞ
XPのタスクマネージャのプロセスタブと同じ様な働きをするプログラムを作ってます。
本物のタスクマネージャのプロセス一覧でユーザー名を有効にすると、
LOCAL_SERVICEやNETWORK_SERVICEといったユーザー名の
プロセスが表示されますが、これらのプロセスをOpenProcessTokenで
開こうとするとGetLastError() == 5のアクセス違反でを取得できません。
ログインユーザーやSYSTEMのプロセスなら成功するのですが、
こういった****_SERVICEのプロセスからユーザー名を取得する
方法がありましたら教えてください。
Web検索しても成功してる人の記事が見つかりませんでした。
ぶっちゃけ下の人と同じ事をしたいのですが、
リンク先の回答者が教えているcodeprojectの方法では
取得する事はできない様です。
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200407/04070077.txt
すいません、アクセス違反じゃなくて、 GetLastError() 5 「アクセスが拒否されました。」 ってエラーです。
開き方が悪い
最低限必要なところのAPIくらい理解しとかんと問題が起きたときにどうにもならん
>>442 そうか?
小さいBMPを2つ作って、
組み合わせをプレビューをすればいいんじゃない?
Photoshopとかあれば、もっと容易だけど
458 :
デフォルトの名無しさん :2007/05/28(月) 10:08:22
ツールバーのアイコンに指定する背景色のカラーコードって何を指定すると透過になるんですか?
イメージリストを作るときのフラグによって異なる
460 :
445 :2007/05/28(月) 10:59:14
いろんな回答がでて、よく分からなくなってきました。 最終的にDirectX使いたいという場合はどうなのでしょう?
DirectXとWin32API はあんまり関係ない。 API直接やDirectX直接を身に付けたいなら 参考書を買ってDelphiでやるという手がある。 API/DirectXの参考書はC/C++で書かれているから、これをC/C++のままコピペしたら 動くのは当然だけど勉強には、あんまりならん。 Delphiに直しながらやれば結構勉強になる。
>>460 DirectX 入門
>>461 Delphiはマジ死亡しているんで知らないなら覚えるだけ無駄。
移植の問題ありまくりなのに素人に、わざわざ複雑な方法を提案してどうする馬鹿か?
>>462 WIN32APIを今さらやるのも、Delphiやるのも同じだろう。
トータルで速い方法を説明してるだけ。
DelphiのVCLはWin32APIの非常に素直なラッパで、VCLを理解すればAPIの作法も理解出来るからね。
MFCでやるよりはずっといい。
DirectX はコピペだけでもやること多いのに、さらに言語移植て…
>>464 ラッパライブラリから API を学ぶのは違うようなキガス
DirectXをやるのにDelphiを勧めるぐらいならC++Builderにしろよ
APIって学ぶものなの? こんなんあったよな〜ってMSDN漁って 挙動とか注意点とか調べて使うだけじゃない?
>>468 最初の作法とイベント駆動まわり、MSDNの見方だけは 慣れとく必要がないかな?
>>464 >WIN32APIを今さらやるのも、Delphiやるのも同じだろう。
同じじゃねーよ!
>>465 DirectXは COMで IDispatch も持ってるから、 Delphiからだと実はVBのようにもアクセス出来る
インターフェースを定義せずに、OLEVariantでアクセス出来るわけ。
ただし遅いけど挙動を見るお試しならまあ十分
>>460 Win32APIでWindowsプログラミングは激しく不向き。
窓一枚で100行とか書かされるからな(コピペですむにしても)。
ただDirectXアプリは窓一枚出せば枠組みはそれでおしまいだから十分いける。
言語に関してはWindowsでCが最適な分野というものはほぼ存在しない。
Cの学習が主眼でないならC++なんかの他の言語の方が後々効率がよい。
C++はCの知識の延長で使うだけでもだいぶ便利。
>「コンピュータの構成と設計」「アーキテクチャ徹底解説MicrosoftWindows2000・・・」
この辺は日本語学習における日本文化の知識みたいなもんでさしあたり不要。
最低限の説明はDirectXの本に載っている程度のもので十分。
>>471 サンプルやヘルプがC++を前提に書かれていて、
いちいち言語の違いを意識して書き直さなければならないので、
挙動を見るだけでも完全に不向き。
>>461 は自分がやった方法が一番良いと思っている可哀想な子
>>473 質問者はC++じゃなくてCらしいから
->lpVtbl->ブフォァアな目にあうけどな
全く別の言語を扱うより遙かにマシ。
ぶふぉぁあ?
>>477 次のバージョンで追加されるメソッドです
たぶん
そうなのか、ダイレクトエッキスには日本語のメソッドがあるんだなたぶん
COMの話だろ
昔は、Delphiから CreateOleObject('CLSID_DirectInput') とか出来たけど DirectX8から出来なくなった
482 :
445 :2007/05/28(月) 15:23:03
ではアーキテクチャについては放置し、C++の方が楽みたいなのでそちらも覚えながら、 C++でDirectX使えることを目標にします
DirectXならDirectXだけの世界だから大丈夫 Win32もとなると大変だけどね。 なお、言語の複雑さは C++ >>> Delphi/C#/VB > C だから覚悟はしておいてね
C#って結構難しいよ
>>483 >言語の複雑さは C++ >>> Delphi/C#/VB > C
C++の全てを理解しようとすればそうかもしれんが、DirectX/MFC等を使うのに必要最低限の知識でいいなら、
Cを(本当に)知ってる人なら3日もあればOKでしょう。
言語論争ウゼェ
>>445 君へ
まずは、君が言うとこのDirectXの大海に向かって漕ぎ出せばいいんじゃね?
悩んだら、CやSDKの掟みたいなものをクレクレで聞くんじゃなく、
自分なりの解答を得たうえでをここの荒くれどもに問い合わせればいいんじゃない?
(そこそこ罵声はあるけどビビらないで)
んで、気が付きゃ、君も荒くれどもの一員
>>486 素のAPIに触ろうなんて貴重な人材を自分の陣営に入れたくて必死なんだろ。 許してやれよ
489 :
デフォルトの名無しさん :2007/05/28(月) 19:16:09
ウィンドウの中にタブコントロールを作成し、それにアイテムを 1つだけ挿入するプログラムを書いたのですがうまくいきません。 以下のコードはメインウィンドウのウィンドウプロシージャが WM_CREATEを受け取ったときに実行されるOnCreate関数です。 これを実行すると、ウィンドウの中に 250×150のサイズの立体的な ダイアログ色の長方形が表示されますが、その長方形にタブは付いていません。 また、タブコントロールに挿入されているアイテムの数を表示するメッセージ ボックスは "n=0"と表示します。なぜでしょうか? 1. throwは実行されない ⇒ タブコントロールの作成は成功している。 2. "挿入失敗"のダイアログは表示されない ⇒ アイテムの挿入にも成功しているはず。
490 :
デフォルトの名無しさん :2007/05/28(月) 19:17:26
void OnCreate(HWND hParent) { InitCommonControls(); HWND hTab = CreateWindow(WC_TABCONTROL, "", WS_CHILD | WS_VISIBLE, 0, 0, 250, 150, hParent, (HMENU)123, (HINSTANCE)GetWindowLong(hParent, GWL_HINSTANCE), 0); if (!hTab) throw; TCITEM item; item.mask = TCIF_TEXT; item.pszText = "hello"; if (TabCtrl_SetItem(hTab, 0, &item) == -1) MessageBox(0, "挿入失敗", "", MB_OK); // 挿入されたかどうかチェック int n = TabCtrl_GetItemCount(hTab); char buf[1024]; wsprintf(buf, "n=%d", n); MessageBox(0, buf, "", MB_OK); }
エディットコントロールにWS_VSCROLLでついてくるスクロールバーについてですが、 このスクロールバーが一番下までスクロールされているかされていないかを判断するには SetScrollInfo()とGetScrollInfo()を使わなければいけないのでしょうか? なんかSetScrollInfo()で設定しても、元からあるスクロールバーのままで何も変わらず いまいち使い方がよくわからなくて困ってます。これらを使わずに 一番下までスクロールされているかそうでないかを判断する方法はないでしょうか?
あります
で?
bool 型は便利だな
全部の質問に答えたとは誰も言っていない。
497 :
491 :2007/05/28(月) 21:29:42
どのように判断すればいいのでしょうか?
::GetScrollPos
>>489-490 > (中略)
> 2. "挿入失敗"のダイアログは表示されない ⇒ アイテムの挿入にも成功しているはず。
> (中略)
> if (TabCtrl_SetItem(hTab, 0, &item) == -1)
> MessageBox(0, "挿入失敗", "", MB_OK);
挿入のときはTabCtrl_InertItem(or TCM_INSERTITEM)。
あと、そこのSetItemは失敗してる。
にもかかわず"挿入失敗"のダイアログが出ないのは「== -1」にしているから。
ヘルプでSetItemの戻り値確認してみ。(InsertItemとの違いもな)
教えてください。 SetClipboardViewerで画像かどうかを識別するには何を使えばいいのでしょうか?
>>500 WM_DRAWCLIPBOARDでEnumClipboardFormats
502 :
500 :2007/05/28(月) 23:35:32
自作アプリの起動時処理として、とある起動済みの(自作でない)アプリケーションのウィンドウハンドルを取得したいのですが ウィンドウキャプションがしょっちゅう変わる上に ウィンドウクラス名もATL:00xxxxxxといった名前でこれまたWindowsを再起動するたびに変わります なので FindWindow では手が出ません。 どうやって取得したらいいでしょう? 現在は、起動時に「対象アプリケーションをクリックしてください」と表示して SetCapture と WindowFromPoint の組み合わせでなんとか取得してますが自動化したいのです。
そのアプリの特徴を研究する。
子ウィンドウを列挙してそのパターンから判別ればよかろ。
プロセス列挙してモジュール名で判別なんてのも
507 :
503 :2007/05/29(火) 00:59:45
>>503 アプリケーションの名前が判ってるなら、
GetWindowThreadProcessIdで指定の窓のpidを取得、
pidからOpenProcessでプロセスハンドル、
プロセスハンドルからEnumProcessModulesでモジュールハンドル、
GetModuleBaseNameでアプリケーション名を取得できる。
GetModuleFileNameExでフルパス名も取得できる。
以上を見つかるまでEnumWindowsで繰り返す。
EnumProcessesから辿る場合はどうすんのかな。
510 :
452 :2007/05/29(火) 05:52:02
>>510 セキュリティソフトに蹴られたりしてね?
最近のセキュリティソフトはマルウェア対策でその手のアクセスを蹴る場合がある
あ、分かった
>>510 WTSEnumerateProcessesでプロセスのSIDが直接手に入る
OpenProcessTokenは必要ない
513 :
452 :2007/05/29(火) 06:37:47
ありがとうございます。 SID取得できたんで解決しそうです。
514 :
489 :2007/05/29(火) 06:39:32
>>499 ありがとうございます。
TabCtrl_InsertItemに変えるとうまくいきました。
515 :
452 :2007/05/29(火) 07:06:24
NETWORK SERVICE、LOCAL SERVICE共に 無事LookupAccountSidで取得できました。
報告乙
なんか夜明けと共に明るい声が響いてくる
EnumWindows/EnumChildWindowsで見て特徴的な何かを探すかないんじゃないの
>>509 それをソースコードにするとどのようになりますか?
コンパイルすればプログラムになるだろ。
とにかく、ウィンドウタイトルもウィンドウクラスも変わるものに対して、 何を持って特定するのだろうか。EXEファイル名だって変えられるしな。
ファイル名が分かればファイルのチェックサムを算出できる。
>>503 なんか、ネトゲのチートツールかなにかを作ろうとしてるように見えるwww
ATL製ネトゲなんてあるのか・・・?
ふとした疑問なんだけど Win32ファイバって一体どういう用途で使うと真価を発揮できるんだろ?
アセンブラが使えない言語でコルーチンを実装したい場合だろうな
>>525 C++/Delphi はインラインアセンブラが使えるから自前でコールチンの実装が出来るから不要。
C#.NET VB.NET あたりの為に用意されたものだろう。
コルーチンは、get/put同士を接続するパイプとか
クライアント型で書かれたものをサーバ型に変換するといった場合に使う
フィボナッチ数列を求める
MultiByteToWideChar と WideCharToMultiByte
530 :
529 :2007/05/29(火) 15:50:08
具体的には、MultiByteToWideChar でSJISからunicodeにし、 WideCharToMultiByte で unicodeから UTF-8にする。 最後に、そのバイト列をsprintf とかで文字列にすればよかろう。
#define VOID void とか #define CONST const は、どういう意味があるんですか?
>>531 #define マクロで置き換えてるだけ。
データ型が大文字(DWORD, UINT)なんで、
大文字で揃えたかったんだけじゃね?
>>525 使い方によっては、デコード/エンコード、画像処理なんかでも
>>531 VOIDとかは違うが、
boolとかconstとかのキーワードはもともとのC言語には無いから、C++でもCでもtう
const は C でもあるぜ。 まあ、全て大文字の奴を使えば、どれもどの環境でも安心! という形にしたかったんだろう。
>>525 Unixからの移植に使えるとAdvanced Windowsには書いてあったような気がする
>>535 最近のANSI Cにはconstがあるが、これは比較的後になって追加されたもの。
もともと、というか少なくともK&Rにはconstはなかった。
K&R まで遡るのはアレだけど、 昔の ANSI C にすら無かったのか・・・。
少なくとも89年のANSI Cではあったな。
Windowsの開発が始まった頃には間違いなくあった。
>Windows 1.0が登場したのは1985年11月18日
>>538 gccじゃないUNIX用のコンパイラはものすごく古い仕様のままだったりするから
Win32の場合はconstが使えない可能性なんて考慮する必要すらないな
const char *とchar const *は違うそうです。 ということはconst char const *もあり? それぞれどう違うのか説明おねg
const char * と char const * は同じだよ。 違うのは char * const 。
WinAPI関係ない C++スレとかいきなされ あるいは本屋いって入門書でも立ち読みしとけ
>>545 この手のは意外と書籍じゃわかりやすく解説されていない気がする。
CONSTとconstに関連して,コーディングスタイルについて質問です。 Windowsプログラミングで自分で関数やクラスをつくるときに, (1)BOOL, UINT, CONSTなどのWin32用にtypedefされたものを使う (2)bool, unsigned int, constなどのC++予約語を使う どっちが一般的なのでしょうか?
C++のboolとBOOLは違うんだぜ
どう違うんだぜ?
>>549 そもそもC++にはBOOLなんて型はない
>>550 普通にWindows.hをインクルードしていれば、BOOLはintにtypedefされる
>>548 SDK,APIの結果を保証するなら、BOOL。
論理で判断するならbool。
という風に使い分ける。
単にintといっても不確定要素をはらんでる。
554 :
デフォルトの名無しさん :2007/05/29(火) 23:38:13
おいら,BOOL のくせに 3 種類 ( >0, ==0, <0 ) の値を返してきて それらをきちんと判別しないといけない API って GetMessage() しか知らないんだけど,他にもあるんだっけ?
だってBOOTはtypedef int BOOL;だし‥‥ bool型とは違うのだよ。
BOOL/boolはほかが言っているとおりなんで、残りのやつについて俺の場合 CONSTは使わず、常にconst UINTはunsignedより文字数少ないから場合によって使う
つーかBOOLもBOOTSもどーでもいいからお前らWin32APIの質問しろよ
>>554 あれヒドいよなw
なら戻り値の型 BOOL にすんなと。
>>560 BOOLはWin32APIの話だろうが。
>>562 BOOLはwindef.hで定義されている単なるtypedefであり、APIではありません。
Vistaで新規に追加されたAPIのリストとかってどこかにありますか? あれば教えていただきたいです
>>566 うお、こんな体系化されたページあったのか
ありがとうございます
XPで追加されたAPI一度も使ったことないどころか一つも知らんかった・・・orz
記述漏れがあるけど参考程度にはなるな
>>554 WM_CTRCOLOR**の戻り値とか、そもそもDialogProcとか
まあx64ではBOOLが32bitのままだもんでDialogProcの戻り値はINT_PTRに変わったけどな
GetMessageもWin32化するときに戻り値の型をintへ変更すればよかったのに
572 :
デフォルトの名無しさん :2007/05/30(水) 16:23:46
質問です。 あるAPLから、フルスクリーンAPLのデバイスコンテキストを 取得したいのですが、どのようにしたら実装できますでしょうか?
GetDC(NULL)
APL(エーピーエル)は、コンピューターのプログラミング言語の一種で、 1957年のケネス・アイバーソンによる創案に基づいた独特の表記法を用いた、 対話型インタープリター言語である。とくに配列処理に優れる。 「APL」とは、『Aプログラミング言語』(A Programming Language)の略であるが、 言語の特性から時に『配列処理言語』(Array Processing Language)と言い換えられる。
これって、アルファベットの A を意味してるのか、 それとも冠詞の a を意味してるのか、 どっちなんだろ? 和訳は前者を採用してるみたいだけど、 訳の都合かもしれないし。
>>575 double meaningじゃないのかな。
と、適当なことを言ってみる。
ごめん素で分からんのだが、APLって何
APL知らんのか。言語だよ キーボードが特殊だった。まあ普通のキーボードでなんとかなるが
APLって遅延評価を積極的に使った言語だったよね 16ビットの鈍足マシンで巨大な配列を使っても結構速く結果が出た
冠詞の a で始まる固有名詞は見たことない
582 :
デフォルトの名無しさん :2007/05/30(水) 21:25:35
ある Windows マシン上の動画ファイルを、 別の Windows マシンからストリーミング再生で表示したいです。 DirectShow + HTTP サーバーを使えば簡単にできそうですが、 動画ファイルを全部ダウンロードすることなく、 動画の特定の時刻からすぐにストリーミング再生することは可能でしょうか?
ネットワーク共有+プレイヤーで好きな位置にシーク APIと全然関係ない
584 :
デフォルトの名無しさん :2007/05/30(水) 21:43:50
ネットワーク共有したくない場合は?
なにワガママ言ってるんだ?
586 :
ららら :2007/05/30(水) 21:51:34
ワガママじゃなくて、途中から再生できるようなプレーヤーを作りたいのら。 ネットワーク共有みたいな、面倒な設定はユーザーにさせたくないのら。
588 :
ららら :2007/05/30(水) 21:52:20
ガマンできないのらー!
ユーザにわざわざデフォルトの機能以外を使わせて、サーバソフトを用意させるのか? なんてワガママな奴だ。
590 :
ららら :2007/05/30(水) 22:02:42
ちがうのら! 動画ファイルはLAN内じゃなくて、インターネット上にあるのら。 サーバーはインターネット上のホストら!
インターネット上経由だろうがネットワーク共有できる。 ユーザに負担をかけたくないならUPnPにでもしておけ。
592 :
ららら :2007/05/30(水) 22:10:44
セキュリティは大丈夫なのか?
それはお前のコード次第
馬鹿が自作したソフトを外部公開するのは大丈夫なのか?
ストリーミングだろうがファイル共有だろうが インデックスでも作らない限り キャッシュ無しで指定時間からの動画再生開始は不可能だろ
596 :
ららら :2007/05/30(水) 22:17:56
わぅー・・・・
気持ち悪すぎワロタw
ゲームをバックグラウンドで操作したくて色々思考錯誤してます。 ウィンドウを指定してPostMessageでキーを送ったのですが EnterやEscなどはちゃんと受け付けますバックグラウンドで動くのですが LeftやDownはダメでした。要はカーソル移動が出来ないんです。 んでSPY++でLeftの入力時を調べてみたところ下記のようなものが出ました WH_GETMESSAGE:[WM_KEYDOWN or WM_KEYFIRST,256], wParam:[0x00000025], lParam:[0x014b0001] WH_GETMESSAGE:[UnKnown,1104], wParam:[0x00000025], lParam:[0x00000001] WH_GETMESSAGE:[UnKnown,1105], wParam:[0x00000025], lParam:[0xc0000000] WH_GETMESSAGE:[WM_KEYUP,257], wParam:[0x00000025], lParam:[0xc14b0001] これをPostMessageで送るにはどのように記述すればよろしいでしょうか またUnKnownの文字列は何をしてるのか教えてください 初心者な質問で申し訳ないですがよろしくおねがいします。
不正はやめましょう。
素直にUWSCで組みましょう
低スキルチーターがあらわれた!
じーんせいはワンツーパンティー
>>582 Windows Media Server 買ってら…
ってかマジレスするとストリーミングサーバとクライアント
を実装するってって話になっちゃうのだけれどそうなると
Win32API 1つ2つだけの話じゃすまないのでもはやスレ違い…
>>579 漏れの完璧で確かな記憶によれば、APL に遅延評価は無かったと思うよ。
>>582 実際にそういうソリューションあるわけだから、自前でコードを書いて
「出来ない」なんて返事はあり得ないよね。
すると「DirectShow + HTTP サーバーを使って簡単に」可能か、
という質問だと仮定すると、返事は「不可能」になります。
市販品のストリーミングシンク/ソースフィルタとかを買えば別だけど。
Windows Home Server機がAppleTV並みの値段とサイズで出るといいんだが
>>608 英語版の最新があれば十分だと思う。同じバージョンの日本語版っていうのであれば使おうと思うけどね。
>>608 どうみてもAPIまわりは日本語化されてない予感
サンプルプログラムのバグを報告してもなかなか修正されねぇよーって中の人が言ってたから、 日本語版では修正されてっかもね。
今まさに英語版入れた所なんだよな……。 .NET まわりのドキュメントの日本語化は欲しいところだが API まわりは英語で構わんし。 異言語版SDK の共存って可能なんすか?
>日本語版 Windows SDK をインストールする前に、英語版 Windows SDK をアンインストールしておく必要があります。 って書いてるよ
>>610 統合前のPlatform SDKも英語版しかなかったからねえ
>>613 あら。すんません読んでませんでした。
ならまあいいか別に英語版で
ドキュメントの一部が日本語なだけじゃないのか 昨日ダウンロード始めたまま寝てしまったが、、、 今夜入れてみるか、、、MSDN待てばいいだけだが。
Ctrl+Alt+Delを禁止するのに今までGINAを使ってたんだけど、Vistaになってどうしたらいいやら・・・ Credential Providerにも同じような機能は用意されてるんだろうか? メソッド一覧を見た感じでは無さそう・・・
>>609 >同じバージョンの日本語版っていうのであれば使おうと思うけどね。
同じバージョンの日本語版なわけだけど、ホントに使おうと思う?
HTTPS通信にて証明書のエラーの時にダイアログを出したいのですが、証明書のエラーを取得できません。
(1)InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_ASYNC)
or
InternetOpen(NULL, INTERNET_OPEN_TYPE_PROXY, proxy, NULL, INTERNET_FLAG_ASYNC);
(2)InternetConnect( Open, server, port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, this )
(3)HttpOpenRequest( Connect, Method, Object, HTTP_VER, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_SECURE, this )
(4)HttpSendRequest( OpenReq, Header, Header.GetLength(), str, str.GetLength());
(5)HttpQueryInfo( OpenReq, HTTP_QUERY_STATUS_CODE , Code, &Len, 0 );
(1)〜(5)は全てTRUE, (5)にてCodeが0となってしまいます
//その後InternetSetOption()でSECURITY_FLAGを設定し再度HttpSendRequest()するとCodeは200が来ます。
//SECURITY_FLAGを設定せずにHttpSendRequest()するとCodeは再度0が来ます。
http://support.microsoft.com/kb/182888/ja を見ると、
HttpSendRequest()の結果がFALSEになりERROR_INTERNET_INVALID_CAなどを取得できるとあるのですが・・・
どこが悪いのかお気づきの方お教え下さい。
>>619 >(2)InternetConnect( Open, server, port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, this )
Portはなぬ?
621 :
619 :2007/06/01(金) 18:41:32
>>620 可変ですが現在は0x1bb(443)でやっております。
よろしくお願い致します。
INTERNET_FLAG_RELOAD | INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_UI | INTERNET_FLAG_KEEP_CONNECTION
>>618 注意 : 本リリースは、最初に公開された Windows Vista および .Net Framework 3.0対応の英語版 Windows SDK リリースを
ベースに開発されています。 また、その後リリースされた英語版Windows SDK Update for Vista には対応していませんが、
アップデートの主要内容である Visual Studio 2005 Service Pack 1 で提供されたVista の新しいセキュリティ機能
「Address Space Layout Randomization(ASLR)」に対応したコンパイラが含まれています。
って書いてあるな。SDKと完全に同じものではないみたいよ。
関連無いけどこっちもwininetの質問 httpQueryInfoを同じアプリケーション内で繰り返し呼ぶと、 abnormal tarminationとかいうエラーがでるようなのですが 原因となりえるものってどんなことがあるでしょうか? 補足: いつもエラーするわけではなく、一日そのアプリを起動しっぱなしにしてると発生します。 HTTP_QUERY_DATE|HTTP_QUERY_FLAG_SYSTEMTIMEをフラグにして、 SYSTEMTIME変数のポインタを渡してます。
>>625 エスパーな俺が一言。
wininet系関数は直接の要因じゃない。
配列やアロケート、Open/Closeを良く調べてみ?
あと、HDDキツキツじゃね?
そうさ! 俺がルールだ!!
ソーサ ヨミウリ
629 :
デフォルトの名無しさん :2007/06/02(土) 14:57:01
SetParentで親ウインドを設定した場合、親ウインドと子ウインドのUIステータスを同期させろ ってMSDNのSetParentの説明に書いてあるんですけど、 UIステータスってなんですか? 具体的にどういう処理をすればいいのですか?
630 :
625 :2007/06/02(土) 15:08:12
どうやらサーバーが重くてヘッダーが 取得できてないようです。 httpSendRequestは成功してるんだけどなぁ。
>>630 乱発(?)した後、ハンドルやアロケートは的確に開放されてる?
特に、失敗パターンは見落としやすいからね。
OSが動作している環境がマルチコアかどうか判定する方法を教えてください
デュアルやクアッドCPUじゃなくてマルチコアなのか
カーネルに聞け
WMIでWin32_Processorあたりかな? HT対応のCPUに関してはGetEnumerator()で例外が発生するかもね。 searcher.Get()の結果がヌルポかどうかで判定しないといけないかもよ。
637 :
636 :2007/06/02(土) 18:37:41
kernel32.dll に聞くAPIはほとんどすべて、結果的にカーネルに聞いているのではないの?
639 :
636 :2007/06/02(土) 18:40:57
>>634 デュアルもクアッドもマルチコアではないのですか?
>>636 うう、WMIですか。
Win32API SDKでは取得できないのかな。
ありがとうざいます。
COMベースってキモイよね 複雑性上げて何したいのかワカラン
>>640 そういう場合は普通マルチプロセッサって言わないか?
マルチコアだと「1つのパッケージに複数のCPU」という意味に使われると思うけど。
>>640 デュアルコアとデュアルCPUは違うぞ?
644 :
636 :2007/06/02(土) 18:54:09
>>641 C側からは、儀式的に感じるよね。
憂鬱なカンヂや
GetSystemInfoでプロセッサ数は得られるが 物理的なプロセッサ数なのか論理的なプロセッサ数なのかは知らん。
646 :
636 :2007/06/02(土) 19:11:08
最近はGetLogicalProcessorInformationって関数もあるのね
便乗で質問です 複数プロセッサに割り当てられてる各プロセッサ毎の スレッドIDを知りたいのですが、できるでしょうか?
今その瞬間に、実際に動いているところの、 他のプロセッサで走っているスレッドIDを知りたいの?
GetThreadAffinityMaskでできるみたいですにゃ
>>649 すげえ
初めて叱咤
あんた最強ですぅ
Set〜から辿らないとぐぐってもmsdnに引っかからないね
え、GetThreadAffinityMaskってなくない? kernel32.dll直接見てもなかったよ
嘘ついたにゃ SetThreadIdealProcessorを1回空呼びして プロセッサが指定されてるか調べればいいにゃ
てめえ! 嘘つきやがって、悪い子だな! つーか優先プロセッサが判るだけで ほんとにそのプロセサで動いてる証拠なんてねーんじゃねえかぁ?
共有フォルダへのアクセスの認証をプログラムで制御したいのですが、 使用するAPI関数を教えてもらえないでしょうか。 net useコマンドのようなことがしたいです。 ドメイン名とユーザとパスワードを指定して、共有フォルダにアクセス できるようにしたいです。
>>654 です。事故解決しました。
WNetAddConnection3を試してみます。
[SECTION] IDENT=VALUE IDENT2=VALUE2 というINIファイルで、IDENT=VALUEの行だけを消滅せしめる関数ってないですか?
txtで読んで消す
>>657 WritePrivateProfileString()
lpStringにNULLを渡す
660 :
647 :2007/06/03(日) 13:21:26
自己解決しました。
OutputDebugStringの出力を受け取って表示するツールを探しています。 コマンドライン型のものでできればpidかプロセス名でフィルタをかけられるものはないでしょうか。
そのぐらい自分で作れよ。
DBGMONってのがあるけど ノートンか何かの影響か何も表示できないw 確実にOutputDebugStringが追えるのはMSDNのlodprof32だけ。
それGUIやんけ
シェアウェアで何かあった気がするな。
サンプルソースにあるんだから、好みで作ればいい
ちょっとどのスレに書いて良いのか謎だったので、不適切なら誘導お願いします。 WIN32APIの学習をしているのですが、TextOutに放り込む文字数の取得方法関連でMSDN見たら、lstrlenはStringCchLengthに変えた方が良いよ、というので strsafe.hをincludeして書き換えてみたのですが、そのstrsafe.hが原因でwarning C4996を吐きます。 このwarningを消す方法として、無視するか_CRT_SECURE_NO_DEPRECATEする他に何か無いでしょうか。 #普通にlstrlen使うのが一番"まとも"な気もしますが、一応学習ということで…… 環境はVC++EE2005です。 ちなみに数時間格闘してみたところ、どうやらDirectX SDK(Microsoft DirectX SDK (April 2007))のstrsafe.h使ったときにはwarningが発生して、 Platform SDK(Microsoft Platform SDK for Windows Server 2003 SP1)のstrsafeを使ったときには発生しない、とか割とどうでもよさそうなことは分かったのですが……
> このwarningを消す方法として 警告が出てるって事は、lstrlen とか strlen とか古い文字列関数が他に使われてるってことだべ? 全部置き換えれ。
>>669 書き方が悪かったですね。warningの詳細も貼り付け忘れていましたし。本当に申し訳ない。
自分の書いているソースには古い文字列関数は一切使われてはいなく(むしろlstrlenすらStringCchLengthに置き換えようとしている)
どうやらstrsafe(が参照しているstdio.h)からwarningが出ているみたいなのです。多分それでPlatform側のstrsafeを使うとWarningが出なくなるわけですね。
c:\program files\microsoft directx sdk (april 2007)\include\strsafe.h(5595) : warning C4996: '_vsnprintf':
This function or variable may be unsafe. Consider using _vsnprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 8\vc\include\stdio.h(339) : '_vsnprintf' の宣言を確認してください。
SDKのパスはデフォルトです。 行数の違う同じ内容のWarningが全部で4つ出ます。
>>670 えぇっと……
> このwarningを消す方法として、無視するか_CRT_SECURE_NO_DEPRECATEする他に何か無いでしょうか。
ということで申し訳ありません。Warning消しとしては正しい方法なのですが、セキュリティを高めるためにわざわざstrsafeしているのに、逆方向のオプション付け足すのもアレなので……
何か勘違いしてるんじゃない? そのWarningが、どの関数で出たのか、もう一度よーくチェックしてごらん つーか、ソース貼ればいいのに・・・
>>671 strsafe.h って何者か、ちゃんと分かって使ってる?
その前に、警告メッセージちゃんと読んでる??
メッセージの内容そのまま、*_s 系の関数使えばいいだけじゃないの?
sprintf周りが抜けてるんだろうなあ
>>671 Warningに書いてあるやんけ。おまいの目は尻に付いてるのか?
metokoumon
679 :
619 :2007/06/04(月) 15:17:29
お返事が遅くなりまして申し訳ございません。
今までの環境が使えなくなったので別環境に移ったところ、
(4)でFALSE, その後のGetLastError()でERROR_IO_PENDINGとなりました。
>>622 VisutalStudio2003, IE6.0となります。
>>623 これにしてみましたが変化はありません
以上、恐れ入りますがよろしくお願い致します
680 :
619 :2007/06/04(月) 15:19:31
>今までの環境が使えなくなったので別環境に移ったところ、 >(4)でFALSE, その後のGetLastError()でERROR_IO_PENDINGとなりました。 これは元からのようでした・・・大変失礼いたしました
>>680 >今までの環境が使えなくなったので別環境に移ったところ、
>(4)でFALSE, その後のGetLastError()でERROR_IO_PENDINGとなりました。
ちなみに、非同期側の処理(スレッド)とか、うまく終了してる?
開放してないフローとか考えられない?
Vistaでログオン直後に画面にかぶさってる「ようこそ」とか「デスクトップの準備をしています...」の画面が 消えるタイミングって何らかの方法で取得できるんでしょうか? スタートアップに登録するアプリのスプラッシュ画面が見事に隠されてしまって何とかしたいんですが・・・
作者のオナニーなんて見たくないからいらんモノを出すな。
>>682 とうぜんシェル(エクスプローラ、、、タスクバーね)が起動するから
それを監視しては?
もちろんそこでスプラッシュを出すにしても、 やるべきことは、それ以前に終わらせておけよ
686 :
682 :2007/06/04(月) 19:13:32
事故レス。
LogonUI.exeが存在しているかを判定することで一応解決。
正確にはスプラッシュではなく、飾りとかじゃなくて表示が必須というものだった次第。
>>684 基本的にそういうものの起動が裏で行われている状態なのでそっちの監視だと不可。
あほだなあ ウィンドウが可視状態かみてればいいのに
>>687 686じゃないが、あの状態ってウィンドウステーションかデスクトップも別物になってないか?
列挙かけてみたことあるけどどうも検索不可属性が付いてるのが出てこなかったが・・・
ということでWindowFromPointとかIsWindowVisibleからの切り込みはダメっぽいよ
689 :
688 :2007/06/04(月) 19:51:00
×付いてるのが ○付いてるのか ちなみにOpenInputDesktopでも普通にwinsta0\defaultになってた。
690 :
668 :2007/06/04(月) 20:52:02
わふ。とりあえずソース貼ってなかったのがダメすぎたっぽいので貼ります。すみません。
http://s-io.net/up/1/_/jump/1180957523712070.8VJMzU pass: API
Warningは読んでいますし、提示してくださったリンクは(ありがとうございます)既に全て目を通していましたし、
目も尻にはついていません。
#節穴かもしれませんし、脳みそはスポンジかもしれませんが……
トラブルの内容としては
>>678 と一緒だとは思うのですが、最新のDirectXのstrsafeで発生する(PlatformSDKでは発生しない)ことから、
PlatformSDKのバージョンを上げる、というのも解決策にはならないみたいです。
#Warningの詳細やらソースコードやら貼らずに分かりにくい説明していて本当に申し訳ないです。でも、DirectXのstrsafeでコンパイルせずに、warningなんて出ないじゃないかボケ、というのは勘弁してください。
WebサーバからSSL証明書をダウンロードして検証したいと思います。 (1)WebサーバからSSL証明書をダウンロードする (2)それを検証する といったようなAPIは無いでしょうか?
ありません
CryptoAPIがとっても面倒だった記憶があるけど。
>>690 だから、673,675が書いてくれた事が正解なんだって。
strsafeってのが何の役割を果たすかを理解しる。
どーせ/GS入れてるんだろw。
Visual C++ 2005は、CRT関数のセキュリティ強化版を“<strsafe.h>とは無関係に”用意している。 (これは次期Cへの提案されている事項でもあるが今はどうでもいい) このセキュリティ強化版の関数は、基の関数名に_sを付けた名前になっている。 例: scanf→scanf_s _CRT_SECURE_NO_WARNINGSを定義していない状態で、従来の関数を使うとC4996になる。 (ただし、C4996自体は、<strsafe.h>などこれ以外でも使われている汎用的な警告) <strsafe.h>とCRTセキュリティ強化、はたまたそれ以外の手段の中からどれを使うかはお前が決めること。 利点欠点を好きに考えて選べ。
じゃstd::stringという事で
速度でないじゃん
文字列操作はコストが高いんだから、速度が欲しけりゃ自前でやるんだな。
699 :
668 :2007/06/05(火) 02:06:53
うー。了解です。この構成でWarning消すとか、無駄なところに労力注ぐの止めて、別の構成にすることにします。
アドバイスをくれた皆様、どうもありがとうございました。
#学習が第一義なので、とりあえずこれでこの問題はオシマイですけれど……
>>696-697 ……一応std::string版のコードも書いちゃったのですけれどね。
jpegのファイルサイズを先頭500バイトあたりで知ることは できますか?
ファイルサイズなら GetFileSize なりなんなりで。
失礼しました。ファイルサイズじゃなくて、ストリームで呼んでいるときの jpegのサイズです。
JPEGフォーマットの詳細を聞いているのではなく、先頭500バイト あたりまでよんで、サイズを確定可能かが知りたいです。
フォーマットの詳細を見て自分のやりたいことが出来るか判断しろよ。
わからない人、答えたくない人は黙ってくれてればいいです。
無理だよ
そもそもWinAPIと無関係。
>>704 正直に言えよ、そのリンク先では難しすぎて自分ではわかりませんでした、と
>>704 結論:不可能
理由:可変長レコード(500バイト以上もおk)があるため
>>704 結論:不可能
理由:あなたは、まだ、その域に達していない
だな、たとえ可能でもお前には無理
起動中のIEのスクロールバーの情報(最大値や最小値、現在の位置)をWin32APIで取得する方法ってありませんか。 GetScrollPosやGetScrollRangeで取得できないようなので、それ以外の方法で取得する方法はあるのでしょうか。
>>714 取得出来ないようなのでってお前・・・。出来るよ普通に。
>>702 ストリームで何を呼んでるの?
jpegをハンドリングする関数か何か?
だとしたら、そいつがサイズを知っているんじゃないの?
718 :
714 :2007/06/05(火) 11:19:46
>>715 マジデスカ。
IEのHWNDとSB_VERTをGetScrollPosに渡せば取得できるということですよね?
>>718 お前の脳味噌には親ウインドウとか子ウインドウとかの概念はないのか?
次は子ウィンドウのハンドルの取得方法でも聞いてくるかな
721 :
714 :2007/06/05(火) 11:26:54
>>719 InternetExplorer_ServerクラスのHWNDを指定してGetScrollPosを呼び出しても取得できないのですが、指定先が間違っていますかね?
>>721 お前は人の話を聞いているふりだけして、実際は何も聞かないタイプだろ。
723 :
714 :2007/06/05(火) 11:34:16
>>722 えぇ。確かにそういう人間かもしれません。
>>722 そういう人間、俺の周りにもわんさか要るわww
自分のことかな?と最近気づいた
居るわ
>>717 マーカーを読みつつパースしながら、運良く APP0 が捕まれば確定&読み込み終了
読み込みバイト数が 500 を超えたら未確定終了
こうするしかないよねぇ
一応書いてやってみるが IEブラウザコントロールのスクロールバーはウィンドウ本体の付属オブジェクトじゃなくて子ウィンドウなんだな?
IEのバージョンは?
730 :
714 :2007/06/05(火) 12:50:13
>>728 ありがとうございます。
私は子ウインドウだと認識しています。
>>729 IE6です。
COMを使えば比較的簡単に実現可能なのですが、事情により今回はCOMなしで実現したいと思っています。
DeviceCapabilitiesで特定のプリンタ名を渡したときだけ動作をしないような。。。 ネットワークプリンタで「マシン名\プリンタ共有名」の場合は動くのだが、 「自動 プリンタ名(マシン名 上)」というプリンタ名を渡したときは動作をしない。 名前がおかしいのかなぁ。。。
DVD-RAMからタスクトレイに常駐するアプリを起動。 DVD-RAMを取り出す。 XPを終了。 ↓ DVD-RAM入れろって出るんですけど、起動元のEXEファイルが無くても、 何も出さずにXPを終了させる方法ってありますか?
リンカオプションで「メディア抜いても起動を続けられるようにする」ってのはあるけど、 どっちみちWindows再起動されたらだめぽ
736 :
733 :2007/06/05(火) 16:54:21
>>734 ファイルコピーしないでやりたいのですけど。
>>735 そんなのあるんですか。 再起動時はEXEは起動してなくて構わないので。
それで出来そうです。 ありがとうございました。
ちょっと733は判りにくくて申し訳なかったです。
「XPを終了させようとすると、DVD-RAMを入れろって出ますです。」
/SWAPRUN:CD か。
なんか1文字入力するたびに、SendMessageBox(hEdit, EM_LINEINDEX, 2, 0);で、3行目の インデックスを表示させているのですが、2回に1回"-1"が返ってきます。 20→-1→22→-1→23→・・・ 3行目以降に文字を入力した場合は 23→-1→23→-1→23→・・・ のように動作します。-1は3行目がない場合に返す値だと思うのですが、 それ以外の場合でも-1を返すような事はありえるのでしょうか?
2回に1回は確実にそういう順番ではなく、大体の割合です。-1が2回続けて返ることもあれば、 通常の値が2回続けて、返ることもあります。ただ、ゆっくりと入力すれば必ず-1と正常な値が交互に返ってきます。 一体何が起きているのかさっぱり分かりません。助けてくだしあ・・・
ちなみに今調べてみたところ、どうやらhEditというコントロールにおいてだけこのような現象が起きています。 hEditは、あるエディットコントロールに文字が入力された場合、そのエディットコントロールの文字を表示するといった動作をします。 表示はGetWindowTextとSetWindowTextで行われます。もしかしたらSetWindowTextで再描画する瞬間に EM_LINEINDEXで行数を調べてるから-1が返って来てるのかな?とか思って排他制御したのですが、やはり-1が返ってきます。 というか、デッドロックも起きたり起きなかったり。
ひとつのファイルを、二つのプロセスからMoveFile()で、名前を変更しようとします。 プロセスA -> MoveFile("hoge", "XXX") プロセスB -> MoveFile("hoge", "YYY") 当然片方のプロセスは失敗すると思ったのだけど、両方リターン値が成功で帰ってくるときがあります。 (リターン値が成功で帰ってくるけど、実際は片方は失敗してる) 二つのプロセスで、ひとつのファイルを取り合うのにこういう方法って、使えないんですかね? それとも、コードの書き方がどこかおかしいとか。
質問です。あるエディットコントロール内で例えば、"aaaaaaaaaaaあああああああああ"と入力します。 すると、ある程度の長さになると"a"と"あ"の間で改行されます(実際は\nは入っていなくて、表示上改行されてるだけ)。 これは仕様なのでしょうか?このように勝手に改行されないようにするにはどうすればいいのでしょうか?
WM_なんとか
>>742 英単語の途中で改行されないようになっている。
EM_SETWORDBREAKPROCでコールバック関数を登録すれば
自分で好きなように変更可能。
>>741 プロセスAのMoveFileが完了する前に、
プロセスBのMoveFileが走るんでしょ?
Mutexを使って管理すればいいんじゃない?
>>744 ありがとうございます。とりあえずエディットコントロールは複数あるのですが、
そのうちの一つは自動で改行されないようになりました。全てのエディットコントロールで
自動改行をされないようにするには、全てのエディットコントロールをサブクラス化して
WM_CHARを捕まえないといけないのでしょうか?
>>746 1500行くらいあるので要点を簡略化してUPします。
その作業をするのでもう少し待ってください。
簡略化したら治っちゃたりするんだなーこれが
>>749 簡略化してる途中に治りました。原因は、等幅フォントを使用してないことにありました。
3行目までの文字をカウントし、2行+1バイトを他のエディットコントロールに送っていたのですが、
時々2行しか送られない事があるせいで-1が返ってきてたようです。2行+5バイトくらいにしたら正常に動作しました。
>>750 インターフェイスの仕様上、スクロールバーはつけないようにしています。
そのせいでエラーの原因に気付きにくい状態が生まれてしまったのですが・・・。
752 :
749 :2007/06/05(火) 23:11:45
754 :
749 :2007/06/06(水) 00:03:36
ま、早とちりは誰にでもある。 元気だせw
755 :
747 :2007/06/06(水) 00:15:21
どうやらWM_CHARの時にいちいちSendMessageしなくても、 WM_CREATEの時に一回SendMessageするだけでいいみたいですね。 随分時間を取られてしまった・・・orz
IWebBrowser2::Navigate2で存在しないURLに移動しようとしたときに 'xxx'が見つかりません。パスまたはインターネット アドレスが正しいかどうかを確認してください。 というエラーのメッセージボックスが出ます。これを抑制する方法はないでしょうか。 このメッセージボックスはDWebBrowserEvents2::OnBeforeNavigate2が呼びだされる前に出て来ます。
なぜ存在しないURLに行きたいの
758 :
デフォルトの名無しさん :2007/06/06(水) 06:11:12
ウインドウズマシンって、 目覚まし時計みたいに、あらかじめ決められた時間に起動するように設定するとかってできるのですか? それと、usbバスに今、抜き差しが行われたって情報を確認することってできるのでしょうか? それは原理的に無理なのでしょうか?
759 :
デフォルトの名無しさん :2007/06/06(水) 06:28:49
>>757 移動できない時に代替処理をしたいのですが、
イベント通知や関数から戻るより先に強制的にメッセージボックスが出ているのが困るのです。
移動する前に存在するか調べればいい
>>756 IWebBrowser2::SilentにVARIANT_TRUEは?
>>758 RegisterDeviceNotification
>目覚まし時計みたいに、あらかじめ決められた時間に起動するように設定するとかってできるのですか? コンパネ-タスク or at
765 :
デフォルトの名無しさん :2007/06/06(水) 10:45:08
OSの起動じゃないのか
767 :
デフォルトの名無しさん :2007/06/06(水) 11:09:38
いや、そうなんですけど、 それは、基本的にできないとわかったので良いです。 とりあえず、情報を教えてくれたと言う気持ち自体に感謝しとるわけです。
BIOSが対応していれば出来るけど?
769 :
デフォルトの名無しさん :2007/06/06(水) 12:14:56
マジっすか? バイオスにプログムから指示を出すんですか?
771 :
デフォルトの名無しさん :2007/06/06(水) 12:25:46
ああ、なるほど、意味分かったです。 そう言うマシンがあるってことですね。 確かに聞いたことはあります。
APIでアクティブタイマを設定するだけ。 あとはBIOSが対応していれば指定した時間に起動する。
BIOS側でしか起動時間を変更出来ないハードウェアのために スケジュールを変更するGUIを作りたいのですが WindowsOS上のプログラムからBIOSの設定変更は可能ですか?
可能ですがやり方や設定位置はマザーボードによって異なります。 詳細は各メーカに問い合わせてください。
メーカーによってAPIが異なることはありますか?
詳細は各メーカに問い合わせてください。
777 :
デフォルトの名無しさん :2007/06/06(水) 13:33:55
>>775 APIはウインドウズなんだから、
ウインドウズosであれば変わらないと考えても良いんじゃないですか?
なるほど。
基本的にはバイオスがアクティブタイマーを監視するようであれば、
プログラムからタイマーを設定すればよくて、
そうでない、場合は各種のバイオス次第と言うわけなんですね。
APIはウィンドウズなんでしたか・・・ 本当にありがとうございました
779 :
デフォルトの名無しさん :2007/06/06(水) 15:29:05
>>778 winのバージョンで使えなかったり動作が違う事はあるけどなー
スルーしろよ
781 :
691 :2007/06/06(水) 17:03:25
>>692 ないですか・・・
>>693 情報ありがとうございます。
(1)はWindowsAPIではどうも難しそうですね。(2)はCryptoAPIでできるかもしれませんが。
(1)はOpenSSLでなんとかならないか調査してみます。
782 :
デフォルトの名無しさん :2007/06/06(水) 20:22:51
editcontrolにautocompleteを付けたんですが そのsuggestのドロップダウンが出たタイミングはどうやったら知ることができますか? WM_NOTIFYとか親に来るのかと思ったけどどうも来ないみたいです
>>745 昔、PerlでCGIを書いたときは、ファイルのリネームで排他処理ができたから、
windowsでも、同じようにできるかなって思ったんだけど、Linuxなんかとは、動作が違うってことなんかなぁ。
VBからAPIを読んでるから、もしかしたらそのせいかもしれないかなと思ったけど、検証がめんどうだから
MoveFileのあとに、ファイルをオープンして、成功したら、リネーム成功ってことにしました。
それってMoveFile()はアトミックじゃないってこと? なんかそれすごく嫌だな
WIN32APIとは違うかもしれませんが質問させてください。 CAxWindowの作成時にパワーポイントのファイルを読み込ませ表示させているのですが、何度もCAxWindowを作成、削除を繰り返していると、削除時(DestroyWindow時)にパワーポイント側のエラー(マイクロソフトにエラーデータを送信してくださいウィンドウ)が発生します。 何かエラーになる原因、もしくは、エラーウィンドウを表示させない方法を教えていただけないでしょうか。 お願いします。
CAxWindow付随メンバの解放する順序なんじゃね?
787 :
785 :2007/06/06(水) 21:41:01
申し訳ありません。 付随メンバの解放とはどうすればよいのでしょうか?
>>787 多分、ヒープやらなんやらの確保順と解放順がちぐはぐなんじゃね? パワーポイント関連のオブジェクトの操作順をあらってみ?
PowerPoint関連オブジェクトのメソッド操作を部分的にコメント(#if 0〜#endif)してみて、 エラーがでるか調べてみたら?
790 :
785 :2007/06/06(水) 22:54:14
レスありがとうございます。 再現しやすいように、CAxWindowの増加、処理の簡略化を 行いました。 (CAxWindowが一つですと、作成→削除を10時間近く繰り返さないと発生しないので) 処理の流れとしては、 CAxWindowを9個ほどCreateし、表示。 ↓ 3秒間CAxWindowの親ウィンドウにPeekMessageを繰り返す。 (CAxWindowを表示させる為だけであり、 プログラムで明示的にメッセージは投げていないです。) ↓ CAxWindowをすべてDestroyWindowする。 以上の流れをループで10分〜30分繰り返すと発生します。 そして、CAxWindowに対して行う処理ですが、 CreateとShowWindowとDestroyWindow以外の処理はさせていないです。 パワーポイント関連のオブジェクトはCAxWindowだけです。 IWebBrowser2も取得しておりませんし。 また、HTMLファイルを読み込ませた場合は、エラーメッセージは表示されないんですよね。 ほんとお手上げです・・・。
SBS_SIZEBOXとかSBS_SIZEGRIPとかって何なんですか! ググっても日本語の解説が無くて
ウソ付くな。
思いっきりみつかるけどな
いや詳しい解説が無くて どこ行っても「サイズボックスを指定する」だの「縁のあるサイズボックス」だの その「サイズボックス」って何なの!って
「サイズボックスとは」でググレ
もちろんググりましたが 「ウィンドウのサイズボックス」ではなく「スクロールバーのサイズボックス」についての解説が見たいのです!
実際「スクロールバーのサイズボックスだ」としか答えようがないんだが・・。 SBS_SIZEBOX指定でスクロールバー作ってみ。
>>798 わかりました。一応作っては見ました。が、使い方が今一わかりません
というか解説(又は画像)が無いことをちょっと不思議に思ってます
これ使われてるソフトもあまり見かけないかなー、と
そこは一番最初に見ました が、だめ! 解説ページは諦めます
へ〜。こんなの初めて知った。 スクロールバーというより「サイズボックスコントロール」っていうひとつの独立したコントロールみたいな感じだな。
何が知りたいのかさっぱりわからん 自分の思い通りの解説が無かったら自分で書け
自分の読解力の無さを人の文章力のせいにするな
季節の変わり目だからな。最近、香ばしいのが多くて困る。
お前モナー
僕バッカー!
808 :
691 :2007/06/07(木) 14:40:34
HttpOpenRequest()のフラグをいろいろ変えて試してみましたが、 InternetOpen()にINTERNET_FLAG_ASYNCを付けると、 HttpSendRequest()はfalseかつERROR_IO_PENDINGになってしまうようですね。 InternetOpen()にINTERNET_FLAG_ASYNCを付けなかった場合、 HttpSendRequest()がfalseになりERROR_INTERNET_INVALID_CAを無事取得できました。 非同期にてERROR_INTERNET_INVALID_CAを取得できる方法はないでしょうか? 試行錯誤してみましたがまったく手段が見当たりません。 アドバイスお願い致しますm(_ _)m
非同期でERROR_IO_PENDINGは正常なんだけど
InternetDestroy()ってなんか恐ろしくて使ったこと無いんですけど、 使って大丈夫ですかね?
812 :
691 :2007/06/07(木) 16:45:23
>>811 レスありがとうございます。
正にこれでした!
コールバックの第四パラメータlpvStatusからERROR_INTERNET_INVALID_CAを取得できました。
本当にありがとうございましたm(_ _)m
ウインドウを常に手前に表示するには SetWindowPosでHWND_TOPMOSTをあたえればできますが そのウインドウがHWND_TOPMOSTなのかを取得するにはどうすればいいのでしょうか?
GetWindowLong
815 :
813 :2007/06/08(金) 00:05:48
どなたか分かる方はいませんでしょうか?
>>815 間違ってたらゴメン
拡張ウィンドウスタイル(GWL_EXSTYLE)を取得して、
WS_EX_TOPMOSTを含んでるか調べるんじゃないかな?
819 :
813 :2007/06/08(金) 00:19:25
難しすぎて分かりません
LONG exStyle = GetWindowLong(hWnd, GWL_EXSTYLE); if ((exStyle & WS_EX_TOPMOST) != 0) { //TOPMOST }
WS_EX_TOPMOSTフラグではなく、お触り禁止フラグが立ちました
>813 TOP MOSTの指定をしたのが知りたいのか? 今、ウィンドウがTOP MOSTで画面に表示されているのが知りたいのか? 後者なら、FindWindowして Z-Orderを確認するしか手がないよ。
823 :
813 :2007/06/08(金) 02:53:05
自己解決しました^^
時間掛かり過ぎ(禿藁)
どうみても他己解決
たこちゅうちゅ
828 :
デフォルトの名無しさん :2007/06/08(金) 08:35:34
現在VC6.0でsubst相当のことをやろうとしているのですがDefineDosDeviceを 使えばできそうだというとこまではわかったのですがドライブの解除時に そのドライブを使用していたら(エクスプローラで開いている等) エラーメッセージを出すということをしたいのですが 探し方が悪いのかよい方法が見つかりません。 申し訳ありませんがどなたか教えていただけないでしょうか?お願いします。
>>828 もちつけ
要約すると、メッセージが出したいのか?
830 :
828 :2007/06/08(金) 09:07:00
>>829 そうです。
DefineDosDeviceで割り当てたドライブを使用していたら
メッセージを出したいです。
必要に応じてSetErrorMode関数 <TODO> GetLastError関数でエラーNo FormatMessage関数でエラーNoから日本語(地域言語) <TODO>の箇所にDefineDosDevice関数とか、使用ユーザーほにゃほにゃ
832 :
828 :2007/06/08(金) 09:35:23
831>> DefineDosDeviceはドライブを使用していてもエラーなしでドライブを解除してしまうみたい なのでGetLastError関数でのやり方がわかりません。 あとSetErrorMode関数も調べてみたのですがいまいち使い方がわかりません。 どうやったらいいか詳しく教えてください。 お願いします。
833 :
ららら :2007/06/08(金) 09:40:31
COM インターフェイスのメソッドって、何で const メソッドがないのら?
const の判断はコンパイラの仕事だから
835 :
ららら :2007/06/08(金) 09:58:04
どういうことなのら?
あほすぎなのらw
>>833 COM は C でも使えないといけないから。
838 :
ららら :2007/06/08(金) 10:07:33
> COM は C でも使えないといけないから たとえば、 interface ISome { STDMETHOD_(size_t, GetSize)(void) PURE; }; なら、Cでは size_t ISome_GetSize(const ISome* some); と書けるだろ?
839 :
ららら :2007/06/08(金) 10:08:55
× STDMETHOD_(size_t, GetSize)(void) PURE; ○ STDMETHOD_(size_t, GetSize)(void) const PURE;
>>832 もうひとつの命題は
「そのドライブが、現在使用中かどうか判断」でおk?
>>828 質問の仕方が悪いよ。
あなたが知りたいのは、
メッセージの出し方ではなく、
DefineDosDeviceした後に、当該のドライブが使用中だったのか否か判別する方法
もしくは、
DefineDosDeviceする前に、当該のドライブが使用中なのか否か判別する方法
なんでしょ?
ならば、そう書いたほうがいい。
>>829 が言いたいのは、そういうことなんだと思うよ。
842 :
828 :2007/06/08(金) 13:15:24
質問の仕方が悪く申し訳ありません。
>>840 さん、
>>841 さんの言うとおり知りたいのは
>DefineDosDeviceする前に、当該のドライブが使用中なのか否か判別する方法
です。
書き込み自体不慣れなもので迷惑をかけているとは思いますが
ご教授よろしくお願いします。
843 :
828 :2007/06/08(金) 13:27:20
知りたいことがまだわかりにくい気がするので もう一度書かせてもらいます。 知りたいことは DefineDosDeviceを用いて割り当てたドライブを 再びDefineDosDeviceを用いて解除する時に、 当該のドライブが使用中なのか否か判別する方法 です。 よろしくお願いします。
>>838 C++ だと
STDMETHOD_(size_t, GetSize)(void) PURE;
STDMETHOD_(size_t, GetSize)(void) const PURE;
の2つを宣言できるけど、
C だとオーバーロードがないからこういう事ができない。
というあたりを意識してるんじゃないかな、と思ってるんだけど、
まあ、正直なところこれが理由かどうかは分からん。
VBにconstなメソッドの概念がないからだと思う まあCOMにconstがないからVBにconstなメソッドを入れなかったという順なのかもしれないけど
まぁ、COM に限らず、C++ の virtual 関数は const にすべきではないように思う。 メンバ関数が const かどうかは実装に依存して決定されるべきことだが、 virtual メンバ関数がどのような実装になるかは派生クラスに依存するわけだから、 virtual メンバ関数の宣言時には const かどうかを決定できないことになる。 したがって、const メンバ関数と virtual メンバ関数は共存できないように思う。
っつかCOM自体はOS・言語と独立。
メンバ関数がconstにすべきかどうかは機能仕様によるだろ 実装に依存するならmutableの存在意義がない
>>843 DeviceIoControlあたりなんかなー
誰か、ドライブ系のコントロールコマンドしりませんか?
>>848 mutable は本来使ってはいけないもの。存在しないほうがいい。friend と同じく。
851 :
ららら :2007/06/08(金) 14:47:20
あのー、もう1つ質問なのら。 CComPtr を使うとインターフェイスの解放し忘れがない というのは本当なのか? なのら。 たとえば、 ISome* GetSome(void); という関数があって、これを CComPtr で受け取ろうとする場合、 CComPtr<ISome> spSome = GetSome(); や CComPtr<ISome> spSome( GetSome() ); とすると、オブジェクトは解放されなくなるらろ? でもこういうコードは自然に書いてしまいそうだから、コワイのらー。 GetSome 関数からも CComPtr を返せって? でもライブラリとして与えられている関数だから、 自分ではどうにもならないのらー。
まず日本語勉強してこい
まことちゃん?
山梨出身の友達もそんなしゃべり方するな。
山梨でも、あんなしゃべり方しねーよw 853の言う通り、まことちゃんだろ。 しかし、まことちゃんを知っている奴は、確実にオッサン
>>838 ISomeを使う側なら、constがあってもなくても同じじゃん。
>>843 安全確実な方法はないと思う。
DefineDosDeviceのフラグに、
使用中ならばREMOVEしない
というのがないということは、
OS自体が実現方法を持っていないのだと思う。
副作用や誤判定が生じても構わないなら、
substしたディレクトリ以下にある、すべてのファイルとディレクトリに対して、
共有しないモードでCreateFileを試みて、失敗すれば誰かが使っている、と。
副作用は、CreateFileを試みて成功してしまった場合、
すぐにCloseHandleしなければならないが、その瞬間を狙って、
他のプロセスがCreateFileすると失敗してしまうこと。
誤判定は、仮想ドライブだけでなく、元のパスを使っていても、
引っかかってしまうこと。
859 :
ららら :2007/06/08(金) 15:33:08
>>857 何ゆーとんのら。使う側が C++ なら const であるかどうかは重要ら。
たとえば、ISome を包含するクラス CHoge を実装する場合、
ISome が const 型システムをもたないが故に、
CHoge も const 型システムを無視しなければならず、
この破壊の連鎖はどこまでも続いて行くらー。
>>850 本来使ってはいけないものだが、
使わざるを得ない場合ってのもあるんだぜ?
>>851 そういうコードを自然に書くくせを直すべき。Attach もあるし。
ISome* tmp = GetSome();
CComPtr<ISome> spSome = tmp;
// 以降でも tmp->Release() はしない
これでリークしないと思える筈がないわけで、1行に書いても同じこと。
でもまぁ MFC みたいに ctor で AddRef しないオプションも、あれば便利だったかもね。
>>860 それは分かるが、const_cast で代用できる。
864 :
846 :2007/06/08(金) 15:38:15
「本気」と書いて「マジ」と読む
>>859 単にCOMのシンタックス上非 const になってるだけで
セマンティックス的には const な動作ならば、
適宜 const_cast 使えばいいと思うけど。
そのための const_cast でそ。
盲目的に「変更するから非 const」とか考えてると、
AddRef ひとつ呼べやしない。
>>863 mutable だと宣言する事と、
const_cast を使う事は、
表している意味合いとか読みやすさとかが変わってくるな。
どちらにしろ、使わざるを得ない状況自体が稀だが・・・。
868 :
ららら :2007/06/08(金) 15:47:11
>>866 結論!
COM は C++ と相性が悪い!
のらー。
>> 845
> VBにconstなメソッドの概念がないからだと思う
COM と IDispatch を混同してはいかんのらー。
COM は VB のためのものではないのらー。
869 :
828 :2007/06/08(金) 16:13:14
>>849 ,
>>858 ありがとうございました。
実現が難しそうだということがわかりましたので
もう少し自分で考えた後、突破口が見つからなければあきらめたいと思います。
>>869 Windowsって、ファイルを開いたときに渡したパスを、覚えてないんだよね。
部屋の中に人がいるかどうかしか管理してなくて、
どの入り口から入ってきたのかは、ノーケアなんだ。
ファイルのハンドルから、ファイル名を知りたくて色々調べたけど、解決方法はなかった。
裏APIを使えば、オブジェクトの名前はわかるようなんだけど、ファイル名とは違うんだよね。
いっそのこと全プロセスに対してCreateProcessをフックしてしまい、
ハンドルに対するCreateFile時のファイル名を管理してしまおうかとも思ったけど、
そんな行儀の悪いことをするのはダメだよねぇ、ってことで諦めた。
870のいう通りなら、 当該のドライブが使用中に、その解除作業やっても問題ないんじゃないか? だから「ドライブを使用していてもエラーなしでドライブを解除してしまう」のでは? これは想像だけど、ファイルを開くときにSubstされたドライブの場合、 正しいディスクのパスに変換してからファイルを開く、ぐらいの処理やっててもおかしくないと思うんだがな。
>>871 たぶんフィルタドライバを使って実現されていると思われ。
873 :
869 :2007/06/08(金) 18:32:09
すいません、質問です。 WinXPにてsend,recvを使ってバイナリデータを送受信したいのですが、 バッファの大きさの上限(要するに、一回のsendや一回のrecvで送受信できるデータ量の上限)って、 何バイトでしょうか?? また、もし上限が無いのでしたら、 例えば1GByte程のデータを送受信する場合、 バッファサイズはどのぐらいが効率的なのでしょうか?? ご教授御願いいたしますm(。−_−。)m
>>874 WinScokのヘルプにバッファの設定について書いてあるんだから、
最低限確認してからにしろよ。
>>874 なんつーか、そもそもTCP/IPはバッファを大きくしてもそれだけの大きさをそのまま扱えるわけじゃないことも
ご存知ないような。入門サイトでじっくりお勉強することをお勧めするですよ。
>>874 マジレスしたらここに聞きにくる以前の問題すぎて笑った
質問です。 CreateCaretでシステムキャレット(長方形型)を使わせていただいていますが ウィンドウのステータスバーの上に被さって表示されてしまいます。 また、DrawEdgeで描いたウィンドウ内枠も上書きしてしまいます。 システムにお借りしたキャレットは描画のクリッピングなどはできないのでしょうか お聞かせください。
879 :
878 :2007/06/09(土) 01:58:46
要するにエディタ等のウィンドウをスクロールした際の キャレットが隠れるように見える挙動を実現したいのです。
ウィンドウをスクロールして、 キャレットが隠れなければならないタイミングで、 HideCaret を呼べばいいのでは。
【政治】民主党、無年金障害者問題で法案提出 在日外国人らも救済
民主党は9日、国民年金の対象外か、任意加入の時期に未加入だったため、
障害基礎年金をもらえない無年金障害者すべてに
「障害福祉年金」を支給する法案を衆院に提出した。
今国会に与党が提出を予定している案では、
救済対象を元学生と専業主婦に限っているが、
民主党案は在日外国人や在外邦人も救済する手厚い内容だ。
給付額は、与党案では障害基礎年金の約6割にあたる月4万〜5万円だが、
民主党案は障害基礎年金と同額としている。
(06/09)朝日新聞
http://www.asahi.com/money/pension/news/TKY200406090286.html
882 :
878 :2007/06/09(土) 16:11:21
テキストエディタ(バイナリもそうだけど)系の奴って、 キャレットは自前描画するもんなんじゃなかったっけ? WM_TIMERつかまえて点滅、とか
君のハートを捕まえて
885 :
878 :2007/06/09(土) 16:27:03
?どっちも同じじゃない?
>>885 ああごめんごめん、全部がそうってわけじゃないよ
でも、あれ。俺はスターリンもBZも持ってんだけど、
試してみたらどっちも、キャレット一部が隠れてもちゃんと残りの一部が点滅してるな・・
バージョンが違うのかな?
バージョンが違いますね
そうですか、すんませんです
>>878 キャレットを所持するウィンドウとステータスバーの領域が重なってるんじゃないか?
StirlingとBZもCreateCaretを使っている
フォルダの上で中央クリックしたら フォルダを新しいウインドウで開く ってのをできるソフトないかな?
ソフトウェア板に行ってね
実行ファイルのアイコンについてですが、WindowsXPのアイコンの表示方法には色々あると思います。 縮小版、並べて表示、一覧・・・ これらに対応して、違ったサイズのアイコンを表示したいのですが、どのようにすればいいのでしょうか?
アイコンは各種サイズを格納してる?
一応48*48と32*32のアイコンをリソースに取り込んでます。 一番数字が若いやつが実行ファイルのアイコンになるっぽいので、48*48が標準で表示されています。 まぁ、どういう表示にしても48*48が表示されるのですが、これをなんとか・・・
指定しろよ
>>896 その2つが別のアイコンとして扱われているのでは?
Windowsでは1つのアイコンファイルやリソースが複数の大きさ・色数のアイコンを保持できる
どうやって指定するのでしょうか・・・(汗 VS2005を使用しているのですが、リソースビューでは特にいじる場所も見当たらなさそうな・・・
>>898 そうなんですか。ということは、今は2つのicoファイルが独立したリソースになってるって事ですね。
ちょっと色々試してみます。
>>899 なんだ、VSかい。EEじゃないよね?
アイコンエディットしてるときに、いろいろメニューさがしてみそ
アイコンは、専用のソフトで一つの.icoにまとめてから、それを リソースとしてそのまま取り込むのが楽。 アイコンをまとめるソフトはフリーのやつでもわんさかあるから適当に選んで使うがよろし ちなみに俺は@iconってのを使ってる
@icon変換 とかで(ものはなんでもいいけど)ひとつのicoファイルが複数の サイズの違う画像を持つようするといいんじゃないかな
>>901 Visual Studio 2005です。リソースの追加>インポートを2回繰り返して2つのicoファイルを読み込んだのですが、
それではいけないんですよね・・・。色々メニュー見てみたり、右クリックしてみたりしたのですが
いまいちどこでそういう変更が出来るのかまだわからないです・・・orz
@iconでマルチ画像保存したら出来ましたああああ;; ありがとうございます! というか、icoファイルって意外と高機能なんですね・・・ jpgとかgifの感覚で一つのファイルは一つの画像だと思ってました
なんでgifが一つなんだ?
脳内
あ、gifは全然一つじゃないですね。アニメーションgifとか昔自分作ってたのに・・・orz
>>904 アイコンのエディット画面のイメージメニューだよ
911 :
878 :2007/06/09(土) 22:58:18
>>887 BZはどうやら1行目だけは非表示にならずキャレットが点滅表示されるようです。
>>890 つまり、クライアント領域は別の子ウィンドウを張り付けるべきですかね?
今まで親ウィンドウに直書き描画しておりましたが・・・。
ここで聞くのが正しいか分からないけど、 VC++2005を使って「猫でも分かるプログラミング」を見て Win32APIの勉強をしているところなのですが、 プログラムに組み込みたいビットマップ画像や音楽ファイルって 生のまま(?)配布するソフトに一緒に入れておくしかないですか?
自分の好きなようにしろよ。
>>913 自分の好きなようというか、
そのやり方しか知らなくて他に選択肢が無いから、
それ以外にやり方があるなら教えて下さい、という旨です。
暗号化するなり、 1つのファイルにまとめるなり、 圧縮するなり、 リソースとして実行ファイルに埋め込むなり 好きにするなりよ
>>914 やり方なんていくらでもある
その辺のPCゲームとか見れば、いくつか参考例もあるだろ?
あと…あんまりWin32APIには関係ないかもな
俺はzlib使って固めて、独自ファイルヘッダくっつけて、
ついでに軽い暗号化かけて、チェック用のハッシュも持たせてやってる
ファイル対象の圧縮・展開は専用ツール作って、
exeから使うときは展開ツールで利用してるクラスを使って簡単展開
この手の質問をする奴って、やり方は分かっているのに、 思いつく方法が面倒くさくて逃げ出したいから、 他人に何とかしてもらおうとしているだけなんだよね。
>>915 色々方法を教えて頂きありがとうございます、とても参考になりました。
まだレベルが低くて暗号化云々がアレなのでリソースとして
埋め込むという方法のやり方を調べてみます。
>>916 PC買って間もなくてプログラミング以外でほとんど使ったことが無かったので
一般的にどうするものなのか分からなかったです。
スレ違い&常識的なことを聞いていたらすいませんでした。
教えて頂いた方法はまだ技術的に追いつかないのでメモしておいて後で参考にさせて頂きます。
詳しく教えて頂きありがとうございました。
>>917 いえ、「猫でも〜」を挙げているように、まだ習い初めなのでガチでやり方が分かりませんでした。
ただ月曜が友人の誕生日で作ったプログラムを送りたくて
日程的に詰まっていたため自分で色々調べる時間が足りず、
ここで他人に何とかしてもらおうと思ったのは事実なので、
教えて君と不快に思われたらすいませんでした。
すみません。質問です。 GetOpenFileNameで既存ファイルのフルパス文字列を受け取った場合、 ユーザーがキータイプしている可能性があるのでこれを統一化したいのですが良い方法はないでしょうか? フルパス文字列をキーとして内部保存し新たにOpenされた場合は相応の処理をしたいのです。 (ちなみに実際にファイル操作をするのはLinkした外部ライブラリです。) MBCS向けコーディングしていますが単純に_mbsnicmpをかませば大丈夫でしょうか? パスの命名規則があいまいで確信が持てません。。。
日本語でおk
922 :
920 :2007/06/10(日) 16:04:07
ああ、説明端折りすぎで意味不明でしたか。すみません 例えば、Abc.bmp、ABC.BMP、aBc.bmpなどは同じファイル(もっと長いファイル名でも)なので GetOpenFileNameで受け取ったパスをそのまま使ってキー探索するのは危険かと思いました で、Windowsシステムが認識しているパス名に統一する方法があればとお訊きした訳です 受け取ったパスでそのままSearchPathしてみたところ、どういう訳か入力した値そのものだったり エクスプローラ上のファイル名に置き換えられたり動作不定です(win2000)
> Abc.bmp、ABC.BMP、aBc.bmpなどは同じファイル ファイルシステムによっては違うファイルなのでは?
あなたは きょうしには むいていません。
925 :
920 :2007/06/10(日) 16:23:49
>>923 え゜、、そうなんですか?
少なくともNTFS上では同じファイルとして扱われてますがFATやFAT32だと違うんでしょうか
なにを悩んでるのかがはっきりしないな。 特に >GetOpenFileNameで受け取ったパスをそのまま使ってキー探索するのは危険かと思いました の意味が分からない。 OPENFILENAME構造体のフラグで無効な文字や、無効なパスははじけるはず。 「危険」って何が「危険」なの?
NTFSもVATもFAT32も大文字と小文字を区別する。 大文字小文字区別しないのは昔のファイル名が8.3のFATじゃなかったっけ?
ファイルシステムとAPIとシェルの各層を区別しろや
929 :
926 :2007/06/10(日) 16:52:53
930 :
920 :2007/06/10(日) 17:08:36
説明下手ですいません。かなりアホなこと訊いている気がしてきました
>>926 既にOpen済みかそうでないかを判定する手段として
Open済みのファイルのフルパスを保存し、一致検索しようと考ました
新たにOpenされたファイルなら前処理を行った後にライブラリにOpen要求を出します
GetOpenFileNameでは存在するValidなパスしか受け付けないように設定しています
>>927 不安になったので今デスクトップ上で上記3ファイルを新規作成してみましたが
最初の1個以外は同じファイル名だと怒られます(XP、NTFS)
>>930 > 不安になったので今デスクトップ上で上記3ファイルを新規作成してみましたが
> 最初の1個以外は同じファイル名だと怒られます(XP、NTFS)
それはWindowsのファイルシステムドライバが過去の互換性に縛られるせい。
933 :
920 :2007/06/10(日) 17:32:51
皆様、ありがとうございます なるほど。基本的な理解が足りていなかったようです。 具体的な解決法が未だ見えませんが教えてもらった情報を元に これから色々テストしてきます
がんばれ
>>920 与えられたパスをFindFirstFileに渡す。
これで大文字/小文字も含めて正確なパスが得られるよ。
俺はGetModuleFileNameで得られたパス名を修正するのに使っている。
がんばるな
CorrectFileNameEx
CorrectFileNameEx に一致するページは見つかりませんでした。
次スレたてられなかった
>>940 >980 くらいでちょうどよい。まだ、早すぎ。
GetCanonicalFileName
ファイルハンドルを開きっぱなしでそのファイルを削除しようとすると、 「ファイルまたはフォルダの削除エラー」がでます。 ファイルが削除されるタイミングを知ることができれば、 ファイルハンドルを解放しようと思います。 タイミングを知る方法を教えてください。
初めから削除権与えたら駄目なん?
951 :
949 :2007/06/10(日) 23:27:14
>> 950 ありがとうございます。 それで行けそうです。 めちゃ助かりました!
>>949 試したことはないけど便宜的ロックで何とかならない?
SMBとかで使ってる奴。
スーパーマリオブラザーズで使われているのはロックではありません。
DPMSで画面の電源を切るにはどうするですか?
>>954 KernelIoControlでIOCTL_HAL_DDIとかじゃね?
ochinchin.h を omanko.cpp に include したのに
includeはinsertじゃないよバーカ
僕バ(略
959 :
デフォルトの名無しさん :2007/06/12(火) 09:33:04
スレ違いかと思いますが、他に適当なスレが見当たらなかったので ここでお伺いさせてください。 Windows2000で Shell_NotifyIcon()でシステムトレイに表示できるアイコンは 16色らしいのですが、この16色は16種類の色なのでしょうか? それとも決められた16色なのでしょうか?
2kまでシステムカラー16色限定。 XP以後フルカラー+アルファが使えるようになった。 でもMEで256色アイコンが色化け無しでトレイにあるのを見たことあるんだよな・・・
IEというか Comctrl32 のバージョン依存じゃね?
ttp://msdn2.microsoft.com/en-us/library/ms538121.aspx hIcon
Windows 95, Windows 98, and Microsoft Windows NT 4.0 support icons of up to 4 bits per pixel (BPP).
Windows Millennium Edition (Windows Me) and Windows 2000 support icons of a color depth up to the current display mode.
Windows XP supports icons of up to 32 BPP.
そのアイコンの話じゃねーんだよバーヤ
そのアイコンの話なーんだよバーカ
扱うのはそのアイコンだが、今回の話はそれとは違う部分の制限だろ
元の質問者は16色と言ってるんだけど、 つまりこれは16色の環境で実行したってことなの?
>>967 >16色らしいのですが
っつーくらいだから、試してはいないとふんだ。
969 :
デフォルトの名無しさん :2007/06/12(火) 16:51:50
すいません。元の質問者です。
試しました。
オレンジベースのグラデーションで16色アイコンをShell_NotifyIcon()で
表示したのですが、XP上ではイメージどおりに表示されたのですが
2Kに持っていったらグレースケール色になってしまったのです。
ググったら2Kは16色だよ。との情報を得ました。
そしてその16色とは固定の16色なのか16種類なのかとの疑問となり、
グレーになる原因を求めてこのスレにお邪魔させていただきました。
>>962 さんの情報では
2Kはデスクトップのカラービットに依存すると解釈したのですが
であれば、32bitに設定していますので普通に表示されるはずだと
思うのですが・・・また解からなくなってしまいました。
普通にShell_NotifyIconだけだと16色にしかならないから XP未満で256色なのはタスクトレイのウィンドウをフックしてイメージリストを書き換えてるんだよ。 exploer.exeにパッチとか常駐ソフトで変更てのもあるが汎用性がない。
グレースケールだとシステム標準じゃないような、、、って 白、明灰、暗灰、黒の4段階ならシステム16色だな。
972 :
デフォルトの名無しさん :2007/06/12(火) 17:13:22
元の質問者です。
すると
Shell_NotifyIcon()だけを素直に使った場合、
>>960 のシステムカラー16色という制限を受けるって
ことですね。
16x16ドット16色で見やすいアイコンを作るのもプログラマの腕の見せ所です
974 :
デフォルトの名無しさん :2007/06/12(火) 17:42:31
なるほどシステムカラーを組み合わせて
遠目からオレンジっぽく見えるようにします。
それにしても
>>962 さんの紹介してくれたMSの説明は
フックしてイメージリストを書き換えるのが前提の
説明なのでしょうか。
英語が苦手なので全部を解読するのは厳しいですが、
それもプログラマの腕の見せ所ですものね。
流れとは関係ないかも知れないが、 うちの win98 では、トレイ上ではないが、8ビットカラーの 32x32, 16x16 の アイコンが表示されている。写真から xpadie かなんかで減色して作ったもの。
休止状態、スタンバイ、スリープから復帰したことを知ることって出来ないですか?
はい。
>>976 出来ない が true か → いいえ
出来ない が false か → はい
>>976 質問の仕方が悪い。
休止状態、スタンバイ、スリープから復帰したことを知る方法がありますか。
あれば、その方法を教えてください。
とか言えばいいのよ。
本当に知りたいことが、方法の有無だけで、
あるなら自分で調べるよ、という人もいるからね。
一行だから行間はない
>976が赤の他人に甘えてるだけ。 行間読むなんて、どこまでできても結局読んだ奴の推測にすぎない。
お前らそんなんじゃコンビニにすら行けないな。
>>985 がアホ過ぎるwよくそんなんで生活出来てるなwwwwwww
質問の回答を聞きに来たのか 煽りに来たのか どっちだ
あんな質問してる方がアホ過ぎだ
一連のレスで何が一番ひどいかって言ったら、
>>981 だろう。
こういうやつにまともなレスをしてはいけない。
しかも自演までしてるし。
「ぼくのしつもんに すなおに こたえないやつは わるいやつ」
>>988 対面リアルタイムでのやりとりは、この文字だけのやりとりとは情報量が格段に違うんだよ。
>>980 くらいでカチンとくるやつは
この板でちゃんとした回答はもらえないだろうなぁ
社会でも駄目だろ 文章力も無いのに行間読めとか言う奴は
課長、行間読んでます?
998 :
デフォルトの名無しさん :2007/06/12(火) 19:28:04
ぬるぽ
行間はここに↓
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。