1 :
デフォルトの名無しさん:
7 :
デフォルトの名無しさん:2008/03/04(火) 12:21:11
前スレ、ベジエに回答してくれた人ありがとうございます><
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, OL, OL, hInstance,
NULL, NULL, NULL, NULL, _T("My Window"), NULL};
某参考書で勉強しているんですが、サンプル通りに打つと↑のOLが識別子が登録されていない、ということでエラーになってしまいます。
MSDNで調べてとりあえず0に置き換えてみたら動いたんですが、OL=0という認識で良いんでしょうか?
参考書の環境はVisualC++2005で、自分は2008を使っているので。その差なのかと思っているんですが、、、
似たようなもので
PeekMessage(&msg,NULL,OU,OU,PM_REMOVE))
ここでのOUも0に置き換えないと識別子のエラーで動きませんでした。
OUとかOLとか検索しても解説が見つからないので、誰か説明頂けるとありがたいです、、、
前スレのCONIMEはタスクマネージャに表示されるしCreateWindow呼んでるぽいけど
ウインドウないの?
>>10 数字の後ろのL はlong のL Uはunsigned のU
15 :
10:2008/03/04(火) 15:13:37
うお、、なんという早い返答。
あー、そういうことだったのか、これは非常に見づらい。
とりあえずややこしい話にならなくて安心しました、どうもありがとうございましたー。
jpgやpngファイルの画像の幅と高さを取得したいんだけど、
画像全体を読み込まずに、幅と高さを取得するAPIやお手軽な方法ってありますか?
>>12 Message-Only Windowってやつだよ。
18 :
デフォルトの名無しさん:2008/03/04(火) 16:03:24
MDIフレームのデフォルト処理::DefFrameProcってMDIクライアントが作られるまでは、::DefWindowProcでもいいの?
ごめん、なんか無茶苦茶変な質問になっちまった...orz
でも知りたいの...orz
>>16 あります。どちらもヘッダ部分に書かれているのでそこだけ解析すれば、全部を読む必要はありません。
とは言え、面倒ですが。
>>19 JPGの場合は・・・、とかPNGの場合は・・・、とかTIFFの場合は・・・、とか処理分けて自分で読むしかないでしょうか?
>>20 そうです。それが嫌なら既存のライブラリで済ませるしかないでしょう。
例えばImageMagickならその辺りは全部サポートしています。
でもその手のライブラリを使うとなると、
大抵データ全体を読み込むことになると思う。
libpngやjpeglibならヘッダだけ読む関数もある
でもその手のライブラリを使うとなると、
大抵フォーマットごとに処理を分けることになると思う。
全部で読んで成功したやつを採用、とか
>>18 OKだが、普通は常にDefFrameProcに投げる
Jpegの場合は、ヘッダの構造上、ファイルを全部読んだ方が処理は簡単です
GifやPngは、画像サイズの位置が固定されているので一部だけ読んで処理しても問題は無いです
>>26 ありがとう!!!
今、ウインドウズのプログラムの勉強がてら、クラスライブラリ作ってて
ウインドプロシージャ見てたら統一できそうだなぁと思ってたんです
これで心置きなく統一できます!!!
その考え方は危険すぐる
// ウインドハンドルデータベース
std::map<HWND, pUBaseWindow> WndToPointer;
/*******************************************************************************/
// ウインドプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
LPCREATESTRUCT lpcs;
pUBaseWindow pWindow = WndToPointer[hwnd];
if (!pWindow){
if (msg == WM_CREATE){
lpcs = (LPCREATESTRUCT)lParam;
pWindow = (pUBaseWindow)lpcs->lpCreateParams;
pWindow->SetHandle(hwnd);
WndToPointer[hwnd] = pWindow;
} else {
return ::DefWindowProc(hwnd, msg, wParam, lParam); // この部分が::DefFrameProcになる
}
}
if (msg == WM_DESTROY){
WndToPointer.erase(hwnd);
}
return pWindow->WndProc(msg, wParam, lParam);
}
こんな感じっす
>>30 それだったら、俺はDefWindowProcにする。
ちなみに、WM_CREATEより前にWM_NCCREATEが送られてきて、
そっちでもlParamからCREATESTRUCTへのポインタが得られる。
現在のWindowsでは、WM_NCCREATEの前に
WM_GETMINMAXINFOが送られるということが知られている。
逆に言えば、それしかやってこないということ。
だから、俺はDefWindowProcで済ます。
ついでに言えば、WM_DESTROYのあとにはWM_NCDESTROYがやってくる。
eraseはそっちでやればいいと思う。
32 :
デフォルトの名無しさん:2008/03/04(火) 19:29:21
Win32使わずにEMFファイル作りたくてEMFの仕様書を読んだんだが、
EMR_HEADERとEMR_EOFの間にどのレコードを作ればいいかわかりません。
具体的には、
任意の色、サイズをもった文字列、四角形、線がかければ良いんですが?
ぽまいらSTLとか使ってますか?
35 :
デフォルトの名無しさん:2008/03/04(火) 22:56:36
MFC だと CString のが親和性高いからまあ使わなくてもいいかもな。
たまに使うけど。
え、std::stringはSTLなの?
ど っ ち で も い い
強いて言うならC++標準。
つまんないことにこだわらんでも良いよ。
頻出ネタの上に面白くない議論にしかならないのでスルー。
apiじゃない
40 :
デフォルトの名無しさん:2008/03/04(火) 23:51:28
ウィンドウが生きてるかどうか、どうやって調べたらいいですか?
ちなみにタイトルバーのキャプションは刻々と変化するかもしれず、また存在しないかもしれないです。
IsWindow
IsHungAppWindow
とか?
43 :
デフォルトの名無しさん:2008/03/05(水) 00:24:43
ダイアログボックスでWM_KEYDOWNを受けるにはどうしたらいいですか?
SendDlgItemMessage?関数の使い方がわかりません。
最後の引数2つがわからないのです。(あとはわかります)
最後の二つの引数はwpalam lpalamとか設定する?いったいなにを
設定すべきなの?
自分で好きなもの
>>45 あなたが伝えたいと思う熱いメッセージの内容を
>>45 SendDlgItemMessage(hDlg, nIDDlgItem, Msg, wParam, lParam)
= SendMessage(GetDlgItem(hDlg, nIDDlgItem), Msg, wParam, lParam)
これで分からなかったらCとWin32を勉強しなおせ
FindFirstFileでファイルの存在をチェックしているのですが、ロングファイルネームだと
Run-Time Check Failure #2 - Stack around the variable が出てしまいます。
> + cAlternateFileName 0x0013e578 "????200712~2.JPG" wchar_t [14]
ググってもFindFirstFileでこんなレベルのエラーが出た人は居ない様です…orz
何をミスっているのでしょうか?
環境はXP SP2、VC++ 2008EE、後はDirectX9 2007Novを入れている位です。
> FindFirstFileでファイルの存在をチェックしているのですが
その程度なら PathFileExists で良かろう
>>49 >何をミスっているのでしょうか?
配列の長さ
>>50 そうですね、PathFileExistsを使う様にします。
それと後出しになって申し訳ないのですが、フォルダの中身をなめる事も
別の個所でやっていました。
元の問題についてもアドバイス頂けませんか?
>>51 具体的にはどこを修正すれば良いのでしょうか?
WIN32_FIND_DATAがANSIになってんじゃね?
>>54 定義を手繰るとFindFirstFile、WIN32_FIND_DATA共にW付きでした。
16文字帰ってきている様に見えるのですが、そういうものなのでしょうか?
そういう妄想は最少のコードで検証してから。
wmainにFindFirstFileだけ書いて動かしてみればいい。
コード1行も貼らないでどこを修正、とか聞かれてもなー
|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ノ|
|丶、 ;;; __;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;_,,: ィ";;_|
ト、;;;;;;;;;;;;;;;` ` '' ー -- ‐ '' ";;;;;;;;;,:ィ;:;!
,';:``' ‐ョ 、 ,_ ;;;;;;;;;;;;;;;;;;;;;;;;;;; , - '"l;:;:;:;:l
l;:;:;:;:;:;:;ミ ` ` '' ー -‐ '" ,リ;:;:;:l
l;:;:;:;:;:;:;:ゝ く三) (三シ `ヾ;:t、
fミ{;:;:;:;:f'´ , -−-_,, _,ィ 、_,,ィ,.-−、 };f }
l トl;:;:;:;:l 、,ィ或tュ、゙:ミ {,'ィt或アチ l:l,/
゙i,tヾ:;:;:! `ヽ 二ノ ト ` ‐''"´ l:l:f
ヽ`ー};:l ,r'、 ヽ リ_)
`"^l:l ,/゙ー、 ,r'ヽ l
゙i ,ノ `'" 丶. ,' コードを貼らずして修正とな!?
゙l、 ′ ,, ィrェェzュ、,_ 〉 } /
',ヽ ヘヾ'zェェェッ',シ' //ヽ
} 丶、 ` ー--‐ '"'´,/ノ:.:.:ヽ
/l 丶、 ,.イ:.:.:.:.:.:.:.:丶、、
,r'"^l ! ` ー‐;オ´:.:.:.:.:.:.:.:.:.,ノ ,}、
,. -ァ=く(:.:.:.l l //:.:.:.:.:.:., - '" ,/ ヽ、
, - '"´ / ,/`>'t、_」___,ィ'゙,ィ,.: -‐ '" ,. -‐ '" \
/ ヽ-( / / f }li, ,. -‐ '" \
じゃあ、張りますね。
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA fileDataBuff;
HANDLE hFind;
hFind = FindFirstFile(_T("C:\\20051215105022.png"), &fileDataBuff);
if (hFind != INVALID_HANDLE_VALUE)
FindClose(hFind);
return 0;
}
>>59 このコードでランタイムエラーが起きると?
61 :
デフォルトの名無しさん:2008/03/06(木) 00:23:14
ウィンドウプロシージャ内でSleepすると、
他のスレッドも一緒に止まってしまっているようなのですが、
止まらないようにするにはどうすればいいのでしょうか。
win32apiとjavaのSWTとではどちらの方が2D描画が高速ですか
win32apiだろ?
SWTのほうが実は早かったりする
まじかよ
wavデータをバイナリ化するにはどうしたらいいですか
wavデータはバイナリデータです
wavデータをリソースとして実行ファイルに埋め込むにはどうしたらいいですか
リソースコンパイラかIDEのリソースエディタを使う
SWTってDirectXみたいにハードウェア資源を利用して描画速度を上げたりしてるの?
>>64 いや、まじで
>>70 Yes
HALのハード寄りの低位なところをVMが使ってるらしいよ
意外と知られてない事実
前提となる条件が明示されていないのに、速い遅いの議論はナンセンス。
>>61 別スレッドからメッセージをSendしているからじゃね?
75 :
61:2008/03/06(木) 08:05:08
簡単にコードを書くと、やってるのはこんな感じです。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
CreateThread(スレッド処理);
while(GetMessage(&msg, NULL, 0, 0)){
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch(uMsg){
case WM_CLOSE:
StopFlg = TRUE;
Sleep(100); //ここでスレッドも止まる
FreeApp();
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
スレッド側の処理を書かないのは本当は解決したくないからだよな。
だったら出ていけ。
情報後出し野郎はスルー汁
ファイルのプロパティの詳細タブの情報ってどうやって取得するの?
文字列と値を取得したいです。
IShellFolder2.GetDetailsOf/GetDetailsEx
>>59 その内容だけで
> + cAlternateFileName 0x0013e578 "????200712~2.JPG" wchar_t [14]
みたいにはならんぞ。????には実際に何が入ってる?
デバッグ中にfileDataBuffウォッチして確認してみてくれ
そもそもてめぇのC:\のファイル構成が分からんのに
hFind = FindFirstFile(_T("C:\\20051215105022.png"), &fileDataBuff);
で何が返ってくるかなんて知るかぼけ
タイトルバー左のアイコンを表示しないようにするにはどうすれば出来ますか?
コード貼れとかスルー汁とか、このスレの住人の愛情の裏返しだから誤解すんな。
おまいさんが当たり前のことをしなかったから、それを戒めただけ。
おまいさんが本当に困ってるという前提で、それぞれ反応しただけ。
コードが貼れない理由もあるんだろうけど、このスレの住人のこと信頼してるなら
きちんとコードを示してな。ここは困った人に知識を分け与えてくれる住人が
いるから続いてるわけだ。それに比べおまいさんの書き込みからは問題を解決
したいという真っ直ぐな気持ちが伝わってこないんだよ。俺の言いたいことは
それだけ。
激しくスレ違いなのでさげ
どうでもいいけどFindCloseをCloseHandleと間違えてしまうことがよくあるw
なんでFind系だけ違うのだろう・・・
見つけて欲しいからさ。
88 :
61:2008/03/06(木) 22:36:40
でかくてコード全部貼れないから、一部だけ貼ったんですが。
アプロダにソース上げたら、見てくれるというなら、
見てもらいたいです。
Sleepで止まっていたのは、
スレッド処理にあるDirectXの、
IDirect3DDevice9::EndScene();が原因でした。
この1行を抜けば止まらないんですが、
理由はまだよく分かりません。
DirectXの問題のようなので、DirectXスレで聞いてみます。
EndSceneする時に描画サーフェイスからウィンドウに転送してるからじゃねえの
んで転送先のウィンドウがロックされてるから止まる
>>80 ありがとう。
プロパティの文字列(値ではなく表題)を取るには、IShellFolder2::MapColumnToSCIDで取得するしかないでしょうか。
これだと200ぐらいループが回るw
SHCOLUMNIDのGUID fmtidに対応した文字列と、
GUID fmtid + DWORD pidの組み合わせに対応した文字列を取得する方法はありませんか?
>>59 その名前のファイル置いてやってみたけど特に問題ないな。
XP SP2 で NTFS のパーティション。
デジカメでフォーマットしたSDとか、そういう変なボリュームを相手にしてない?
(だからってバッファオーバーランは困るけど)
C:\がSDカードとかあり得なくね?
うちのB:\はsubstしたデスクトップフォルダ
いやC:\以外はどうにでも出来るだろw
学校にD:にOS入ってて、USBメモリとか挿すとC:として表示されるPCが1台あるんだが
>>95 やめときなされ
事実を語っても推奨される環境云々って自説に固執するオバカが騒ぎ出すだけだから
無知は無知のまま放って置けばよいのだ
そういえばPC-98とかでC:がFDDだと動作しないソフトがあったな
98はAから始まってたし、どーなんだろ
98 もなにも、今でもフロッピーは A だっしょ。
A, B がフロッピー用に空けられていて、
HDD が C からなのが通例。
あくまで通例であってそうしないといけないわけじゃないが。
|
|
|
|
/V\ ,J
>>100 /◎;;;,;,,,,ヽ
_ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
>>100 ネタなのかPC-98を知らないゆとり世代なのか
>>103 あの時代は HDD はそんな一般的じゃなくて、
フロッピー2枚差しが普通だっただろ?
その時代、ドライブレターは頭から A, B と振ってた。
そこに HDD がやってきて、それがフロッピーの次の C から振られるようになって、
その後フロッピーが1つしかなかったりそもそも無くなったりすることが増えたけど、
結局 HDD のドライブレターは C から振られるので定着してしまっていた、
という流れだと思っていたのだが。
PC/AT互換機はABドライブがフロッピー用に予約されてて
テープメディア等を繋ぐとC以降が割り当てられた。
拡張FDDをつければCがFDDにもなる。
その後、テープメディア等からHDDに変わったけど
ABドライブは相変わらずフロッピー用に予約されてる。
そんな事知らないNECが作ったPC-98は起動ドライブが無条件でAになる。
こっちの方が分かり易いとでも思ったんだろうな。
だから、HDDから起動すればHDDがAドライブになる。
Cドライブに固定するのは確か出来なかった気がするけどもう忘れた。
そうだったっけ。
もう記憶があやふやだな・・・。
PC98のせいでPC普及が遅れたのか
PC98のおかげでPCが普及したのか
どちらにせよPC98独自ルールになれてた漏れは
Win95からAT互換機移るときに苦労した思い出がある
DOSゲーやりたいがためにWindows95が出た後もPC98買ってた馬鹿がここに一人いますよ
DOSの頃はNEC PC98の方がVRAMいじり易くて好きだったな。
0番地弄くりまくれる
VALUESTAR 買ったな。
当時はまだ PC98 買う人はいた気はする。
PC98じゃなくてPC-98だろ
昭和61年生まれの俺だってPC-98ぐらい知ってるよ。
ゆとり世代馬鹿にすんな。
そこら辺は突っ込んだら負けかなと思った
平成元年生まれだがPC-98知ってるぞ
実機は見たことないが
ゆとり世代馬鹿にすんな。
昭和生まれなので、amiga使ってました
ビデオトースターとか
馬鹿はいつまでたっても馬鹿
馬鹿はいつの時代にもいる
馬鹿は量産される
そろそろお別れのお時間となりましたのでドライブレターの話は終了
もう終わってるのだが。
ここまで誰もスレ違いと指摘していないことに驚きを禁じ得ない
お題に沿った話は「ググれば?」「思い違いだよ」のパターンで固定化されちまってるから・・
ちなみにPC/ATのFDDはドライブが1台しかなくても
A:/B:どちらでもアクセスできるようになっていた
PC-98の場合は・・・
USB-HDとかネットワークドライブとかを
いっぱいマウントしてD〜Z使い果たしているPCで
さらにマウントするとBにマウントされたのに感動
うるせーだまれRAIDぶっ壊すぞ
>>105 PC-98でも、Windows 2000を新規インストールすると、
起動するHDDパーティションがC:になるって聞いたことがある。
質問スレは雑談を始める奴が出たしたら終わり。
そしてそれを咎める奴を無視したり叩いたりしたら再起不能。
>>124 初期のPC-98と最近の(今でもあんのか知らんが)PC98は違うよ
127 :
デフォルトの名無しさん:2008/03/08(土) 11:58:20
エロゲーなどで、
フルスクリーン時にマウスカーソルをウィンドウ上部に持ってくると、
上からタイトルバーがにょきっとスライドして出てくるものがありますが、
にょきっと出現させるAPIがあるのでしょうか?
それとも自前のプログラムですか。
そんなのあるんですね、調べてみます。
むりやりAPIの話に戻した感が否めない
DirectGDI+の話?
SetMenuNyoki( HWND hParentWnd,HWND hMenuWnd,BOOLEAN bOpenHide,LPVOID pVoid )
ParentWnd 親ウインドウハンドル
hMenuWnd メニューのハンドル
bOpenHide TRUE:メニュー表示、FALSE:メニュー隠す
pVoid 拡張のための予約。NULLに設定。
オンマウスオーバー処理は?
ああいうアニメーションてどうやってるんだろう
動いてる間UIスレッド止まったりしないし
VistaのスクロールバーからMouseLeaveで徐々に色が消えるやつとか
136 :
127:2008/03/08(土) 12:47:26
>>128 ちょっと本気でググってしまいました。
>>132 DirectXでできるんでしょうか?
素人考えですが、
タイトルバーが上からスライドしてくるということは、
その分、押し出される感じでクライアント領域が下にずれるから、
画面の描画内容が動かないようにするためには、
描画位置をその分上にスライドしないといといけないのかなと、
思うんですが、どうなんでしょうか。
へーこんなのあるんだ
>>127じゃないけどためになった
ただゲーム以外でどこで使うのか思いつかない
そのエロゲー作ってる会社に入って技術盗んでくればいいだけの話
ここで聞くな
140 :
127:2008/03/08(土) 13:11:27
>>137 ありがとうございます。
こんなAPIがあるとは。
タイトルバーだけに適用できるんでしょうか。
対象はウィンドウ。流行らなかったけど画面のはじにカーソルを持ってくるとにょきっとタスクバーが
表示されるようなアプリケーションで使われる。
タイトルバーだけのウィンドウを作っておくとか
エロゲー会社の技術力って半端ないな
IT業界みんなの憧れだわ
144 :
127:2008/03/08(土) 14:25:04
思い返すと、にょきっと出るゲームはごく一部で、
多数のゲームは単純にタイトルバーを表示していただけかもしれません。
タイトルバーだけのウィンドウと、
クライアント領域だけのウィンドウを作って、
AnimateWindow(hTitleWnd, 600, AW_SLIDE | AW_VER_POSITIVE);で、
タイトルバーウィンドウだけ、にょきっと出してみようと思います。
>>143 初心者が2chで質問して、2時間であたりがつく技術。
半端ないですね。
IEの全画面表示でもSetMenuNyoki使われてるね。
Nyoki言うなw
Visual Studioで各種ツールバーを自動的に隠す、の設定にしてる時のあれでないの?
#define SetMenuNyoki(hParentWnd, hMenuWnd, bOpenHide, pVoid) \
AnimateWindow(hMenuWnd, 200, (bOpenHide) ? AW_SLIDE : AW_HIDE)
Windows98の出荷年以前までは実際Koeiも真っ青ってなエロゲメーカがゴロゴロしてたんだけどねぇ
BOOL WINAPI DllMain(HINSTANCE hInst, WORD wReason, LPVOID lpReserved)
{
switch(wReason)
{
case DLL_PROCESS_ATTACH:
VERBOSE(DLLTEXT("Process attach.\r\n"));
break;
case DLL_THREAD_ATTACH:
VERBOSE(DLLTEXT("Thread attach.\r\n"));
break;
case DLL_PROCESS_DETACH:
VERBOSE(DLLTEXT("Process detach.\r\n"));
break;
case DLL_THREAD_DETACH:
VERBOSE(DLLTEXT("Thread detach.\r\n"));
break;
}
ユニドライバの最初にこうあるのですが、それぞれのメッセージは
どのようなときにおくられてくるのですか?またVERBOSEとはなんでしょうか?
もうググレカスとしかいえない
かもく or うざったモード
いいから説明しろよカス
それぞれのメッセージは
Process attach.のときにおくられてくる
Thread attach.のときにおくられてくる
以下略
155 :
デフォルトの名無しさん:2008/03/08(土) 21:45:20
>>150 お前ってさ自己中で友達とかいないだろw
156 :
デフォルトの名無しさん:2008/03/08(土) 23:36:13
ビットマップ画像のサイズを調べるときに、以下のような処理をしてるんですが、
描画するわけでもないのに、画像読込、解放してるのが凄く無駄な気がします。
サイズ取得用のAPIなど、もっといい方法ってないでしょうか?
BITMAP bmp;
HBITMAP hbmp = (HBITMAP)LoadImage(hInst, <画像のパス>, IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);
GetObject(hbmp, sizeof(BITMAP), &bmp);
width = bmp.bmWidth; //画像幅取得
height = bmp.bmHeight; //画像高さ取得
DeleteObject(hbmp);
ビットマップならヘッダに書いてると思うけどそういう事じゃなくて?
CreateFileして24バイト読み込む
最初の14バイトがBITMAPFILEHEADER
以降がBITMAPINFOHEADER
ごめんw
24じゃなくて54バイトw
どうもありがとうございます。
ヘッダから読み込むことにします。
ここで質問するべきなのか迷いましたが、該当するようなスレがないようなので質問させていただきます
指定のフォント、フォントサイズで文字列の画面上でのサイズを計算したいのですが、
どんなAPIを使えばできますか?
GetTextExtentPoint32
>>163 即レスありがとうございます!
助かりました
なんか2つとも同じ質問が最近出たような・・・
気にするなよ( ´_ゝ`)
main()で開始したコンソールに対して、
プログラム内部からSetWindowLongを試みたところ
GetLastErrorで5番のアクセス拒否が返ってきたのですが
これはやっちゃいけないことなんでしょうか
コンソールはcmd.exeの所有なんじゃね
システムのメッセージを間借りして、自分の送りたい情報をSendMessageで送ってもいいものでしょうか?
例えば、
::SendMessage(hParent, WM_PARENTNOTIFY, MAKEWPARAM(WM_NCDESTROY, id), (LPARAM)hWindow);
の様な感じで
と言うことはコンソールに拡張スタイルを適用するのは難しいですか
ありがとうございました
>>169 なんでもおkという訳ではないけど、そういう使い方をするものは存在する
WM_HITTESTとか
いやWM_APPでも使えば良いだけの話だろ
>>171 ウインドウの終了を親ウインドウで捕まえたいのですが、POPUPスタイルだったり、MDIの子ウインドウだったりした場合
WM_PARENTNOTIFYを捕まえることが出来ないので自分で明示的に送ろうかと思ったのですが問題がでたらいやだなぁと思い
質問させていただきました
>>172 たしかに、WM_APPを使うのが楽でいいのですが...
オリジナルのWindows用クラスライブラリで使うので、WM_APPの使用は極力避けたいのです
RegisterWindowMessage
_beginthreadex を使用したプログラムで、MSDNには
abort、exit、_exit、または ExitProcess を呼び出したスレッドがあると、
すべてのスレッドが終了します。
と書かれていたのですが、明示的に終了関数を呼ばない場合
スレッドは生きたままになるのでしょうか?
>endthread や endthreadex は、パラメータとして渡されたルーチンからスレッドが戻ると自動的に呼び出されます。
>>175 普通に組むと、
エントリポイント - CRTのスタートアップ関数 - main/WinMain
という構造になる。
VC2005のCRTだと、main/WinMainから帰ってきた後で_exitが呼ばれているので、
その結果他のスレッドも終了させられる。
微妙にスレ違いなネタの気がしなくもないな。
178 :
175:2008/03/09(日) 17:44:51
>>176,177
とんくす。それが知りたかった。
サイズ復元ボタンを持っているけれど、
クライアント領域がないタイトルバーだけのウィンドウって、
どうやって作ればいいんでしょうか。
リサイズ禁止にした上でウィンドウの高さをタイトルバーの高さに合わせれば
ウインドウ作成するときに
ウインドウサイズを指定できるけど
クライアントサイズから
ウインドウサイズを算出することはできない?
AdjustWindowRect
NyokiWindowRect
186 :
179:2008/03/10(月) 01:00:10
>>181 最大化も最小化もしていないので
「元のサイズに戻す」ボタンが表示されなくて、
でも、最大化してしまうとクライアント領域ができてしまいます。
>>183 なんか丁度10分前くらいに作ったので。どうぞ。
void getWindowSize(WORD clientW, WORD clientH, WORD* pWindowW, WORD* pWindowH, DWORD style) {
RECT rect = {0,0,clientW, clientH};
AdjustWindowRect(&rect, style, FALSE);
*pWindowW = (WORD) (rect.right - rect.left);
*pWindowH= (WORD) (rect.bottom - rect.top);
}
メニューバーやスクロールバー等を考慮するとAdjustWindowRectでは対処出来ないので、
実際に表示してから目的の状態になるまでリサイズを繰り返すしかない。
メニューはAdjustWindowRectExである程度考慮してくれる。
これだって完璧にやってくれるわけではないけど。
NyokiWiki希望
>>189 深い理由はないけど、
サイズ4294967296みたいなウィンドウを作る予定はなかったので。
特に理由がないときはintにしておくのが一番効率がいいってばっちゃがいってた
コンピューターおばあちゃん乙
ウォーウ、ウォウ、ウォウ、ウォウォウオウ
さてはおまいら同世代だなw
古い世代なの?スプーンおばさんなら知ってる。
コンピュータ、おばあちゃんときたらアビバしか思いつかない
short main(short argc, char **argv)
こんなソースに噴いた事あるw
なんだその滅茶苦茶な引数www
と戻り値の型
sizeof(short int)==sizeof(int)な処理系なんだろ
>>191 サイズの小さい変数を使ったら速くなると思ったら大間違い。
WORDなんて中途半端に混ぜるとかえって遅くなる。
そこはRECTのメンバがLONGだから、LONGにするのが普通。
速くしたいからなんて書いてないな
最後の一行は同意
コンピューターおばあちゃんも明治生まれだから
もうobsoleteだな
おながいサミヤどん
ちと質問なんですが、キーボードメッセージがどのデバイスから送られてきたかを調べて
デバイスごとに処理を振り分けるということは可能なのでしょうか?
具体的にはPS/2とUSB接続の2種類のキーボードが接続されているPCで、
PS/2キーボードでEnterキーが押された場合と、
USBキーボードでEnterキーが押された場合で処理を振り分けたいのです。
やったことないので糞レスですまないが
そんなことを実現しているアプリはあるのでできるはず
>>207 XP以降ならRaw Inputで区別できる。
210 :
207:2008/03/10(月) 13:58:00
>>208-209 RawInputでぐぐったらそれらしい情報が見つかりました。
これで何とかなりそうです。ありがとうございました
できるが、WM_***よりもっと上位の部分に食い込まないと無理だろうな
プログラム多重起動防止のため、mutexを使うことがよくありますけど、
OpenMutexでミューテックスが開けた場合、そのミューテックスハンドルを元に
ミューテックスを持っているプロセス(≒前のインスタンス)のプロセスハンドル
又はプロセスIDを得る方法ってあるんでしょうか?
頻繁に起動・終了するタイプのプロセスなので、可能ならそれを使って
WaitForSingleObjectしたいのです。
212です。
よく考えたら開いたミューテックス自体を使って同期すればいいのか・・・
Mutexとか面倒くせえなあ
WinMainの第二引数が使えりゃいいのに
多重起動禁止したいときにOpenMutex()が出てくるコードは、やり方を間
違っているので注意。
そこまで教えるならCreateMutexを使えと教えてやれよ
多重起動禁止といえば、俺はいつもCreateMutex→CreateWindowの順で
やっていたが、CreateWindow→CreateMutexにしないと穴があるな。
既に起動しているインスタンスがあれば、そっちをアクティブにするんだけど
CreateWindowの前に多重起動の判定していると、Mutexはあるがウインドウが
ないという状況が存在するね。
ウィンドウがあってもアクティブにできるかどうかわからんぞ
終了直前かもしれんし
面倒くさいから、多重起動できちゃったら
「あたり。今日はちょっといいことあるかも」
ってことにしよう。
そもそも本当に多重起動を防止すべきソフトなんて限られてると思うが
Mutexハケーンしたらタイマー掛けてWindow探せばイイだけじゃないの?
>>217 「Win32/C++マルチスレッドプログラミング詳説」
CreateMutexでOwnerを設定し、ウィンドウができたらReleaseMutex
別スレッドはWaitFor
普段は多重起動できないのに肝心な時に腐るほど大量に起動してしまうタスクマネージャw
あるある
Winampって普通多重起動しないじゃんか。
曲を開く度にWinampが起動したら困るっしょ。
だけど、Vistaのエクスプローラで複数選択してコマンドバーから
Winampのアイコン押すと、選択した数だけWinampが起動する。凄い。ヤバい。
そうだね。宇宙ヤバイね。
他プログラムがファイルに書込んでるんですが、
この書込みが終了したことを知るAPIってありますか?
APIレベルじゃムリじゃねーかな
書込禁止共有でオープンできるか否か
RegSaveKey でレジストリをファイルに落としたのですが、出力するファイルがバイナリのレジストリでした。
レジストリをテキストのレジストリファイルする API などありませんでしょうか。
そのテキストの形式は?
regedit.exe互換にしたいということ?
>>231 そうです。regedit.exe 互換にしたいと思ってます。
特定のプロセスがエラーで死ぬとき、エラーメッセージ(このプログラムは不正な処理云々)を
出さずにそのままプロセス消滅とさせる方法はあるでしょうか?
とあるシェルエクステンションで外部プラグインDLLを利用可能としたとき、プロセス分離させてある
ので出来の悪いプラグインが落ちてもシェルは巻き込まないけど失敗時にエラーが出るのは避け
たい・・・という用途です。
233の追記です。
普通のエラー類ならプラグイン呼び出し部だけWin32例外ハンドラで捕まえられますが、
DirectShowモジュール等を使うと例外ハンドラだけではエラーが捕捉しきれないようなのです。
まずはその出来の悪いプラグインの作者に文句言って直して貰うんだ
StartPage を実行するの前のページで設定していた CreatePen での設定は
引き継がれないdえ初期化されてしまうものなのでしょうか?
すいません。win32apiを使って、低解像度(320x240)のフルスクリーンでビットマップを描画すると、
ぼやけた感じになるのですが、これを1ドットずつくっきりと表示させるにはどうしたらいいですか
ちなみにdirectXのsprite描画でも同じ結果でした。
低解像度ではぼやけるものなのでしょうか。
液晶が悪いって落ちじゃないよな?
>>230 受け取ったレジストリ情報を自分でテキストとして出力すればいいだけだろ。
>>237一切拡大とかせずに表示してるんだろうな?
>>242 はい。BitBltで表示してます。
ていうか、マウスポインタもぼやけて表示されます。
だから液晶のディザリングだろうが
液晶 ぼやける の検索結果 約 80,800 件
液晶 Nyoki の検索結果 約 94 件
>>233 SetUnhandledExceptionFilter使えば規定の処理を上書きできるのかなあ?
よくわからん。ごめん。
Advanced Windowsに何か書いてあったような気もするけど…。
>>240 Vistaだと管理者パスワードが必要。
>>241のように自分でregedit互換のテキストにするほうがいいんじゃ?
ユーザーに面倒をかけるよりは自分が面倒くさいほうがまし。
regedit.exeそのものがUACに引っ掛かるっしょ
不便だなぁ。仕方ないのかも知れないけど。
253 :
デフォルトの名無しさん:2008/03/12(水) 00:43:50
ビッとブリッと屁をこいた
>>243 ノートPCならBIOSで拡大表示時の設定が出来るものがある。
デスクトップPCなら液晶のOSDで拡大補完レベルを設定できるものがある。
↑俺のシャープの液晶がこれ
>>237 画面の解像度と液晶の解像度が一致しているか確認する。
老眼鏡の度があっているか確認する。
>>255 PCに繋げられるQVGAの液晶なんてあるのか?
>>257 PCから出力されてるドットとディスプレイ上のドットを1対1に対応させることのできる液晶はある
低レベルすぎだろw
ドラッグ&ドロップしたファイルのパスの取得にはDragQueryFileを使えば良さそうってことはわかったんだけど、どうにもうまくできません
wParamが”値が割り当てられていないローカルな変数”とか警告が出てままだし、
何か根本的な部分で理解できていないようなんですが、どこがおかしいのか教えていただければ幸いです
使っているのはVC++6.0です
HANDLE wParam;
char szFn[256] ;
//DragAcceptFiles(hWnd,TRUE);
//UINT iCount = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
DragQueryFile((HDROP)wParam, 0, szFn, 256);
printf("%s",szFn);
これで実行するとszFnの中身がフフフ…でまったく機能してませんでした
真空波動研からflvファイルの画像サイズを取得して、FLVPのiniのウィンドウサイズを書き換えて
等倍で再生されるFLVPの支援ツールを作っていて、ネットのソースを色々流用してflvのパスの取得以外はちゃんと動作するものが
できたんですが、あと一歩なんです
APIを使うなら該当部分のヘルプぐらい読めよ。
> これで実行するとszFnの中身がフフフ…でまったく機能してませんでした
変数に笑われているようではあと一歩どころでは無かろう
つうかその程度のツールならvbsで作れそうな気もするが
なんか適当だわ
case WM_CREATE:
DragAcceptFiles(hWnd, TRUE);
return 0;
case WM_DROPFILES:
{
int len = DragQueryFile((HDROP)wParam, 0, NULL, 0);
char* p_strBuf = (char*)malloc(len+1);
DragQueryFile((HDROP)wParam, 0, p_strBuf, len+1);
MessageBox(hWnd, p_strBuf, "message", MB_OK);
free((void*)p_strBuf);
DragFinish((HDROP)wParam);
}
return 0;
あと一歩が山あり谷ありで距離も足元の道さえも見えない
これが仕事ならデスマーチ
ひいぃぃ・・・!!
>>267 真空波動研やらFLVPについては関知しないが、
ざっとコード見た感じDragAcceptFiles()やDragQueryFile()じゃなく
コマンドライン引数使えって話のように思える。
スクロールバーやツールバーをマウスでクリックすると、そちらにフォーカスが移ってしまうのですが、
使い終わった場合(例えばスクロールが終わったり、ツールバーのボタンを押した後)に
もともとフォーカスを持っていたウィンドウにフォーカスを返すにはどうしたら良いのでしょうか?
固定幅のフォントの文字の幅と高さを取得するのに、
デスクトップのDCを使って GetTextExtentPoint32() しても
問題ありませんか?
文字を描画するのは作ったウィンドウなんですが。
>>268 ありがとうございます!
出来そうな気がしてきました
基本的には思い通りのプログラムができました
ありがとうございました
後は細かい設定をつけていきます
こんなもんvbsとかのスクリプトで作った方が早かろう
>>270 デスクトップで使われてるフォントで描画した場合の高さと幅が返ってくる
それでも良ければそうしたまえ
>>269 WM_SETFOCUSを見て頑張れ
この場合スクロールバーは子ウィンドウでないと駄目かもな
printf使ってるからコンソールアプリだろうとは思ったけど
コンソールアプリだとするとDragQueryFileをどうやって呼んでるか謎だった
>>274 同じフォントなのにデスクトップと自ウインドウで描画時に幅かわることがあるのですか?
>>277 なんでよそさまのアプリであるデスクトップ=explorer.exeを使うか理解できない
自前でDCつくればいいだろ?
デスクトップと自ウインドウのDCが互換である保証はなかったはず
あれか文字のサイズにあわせてウインドウつくるのか?
アプリケーション毎にウィンドウのDPIが変わるってことなかったっけ?
282 :
277:2008/03/13(木) 22:00:55
どうもよろしくなさそうなので、きちんと自ウィンドウ生成してから関数呼び出すことにしました。
ありがとうございました。
いや、わざわざウィンドウを作らなくてもCreateCompatibleDCしたメモリDCを使えばいいのだが
要するに、クラスか何かつくってて、フォントの幅計算してキャッシュしておくのにDC必要で、
自ウィンドウのDC渡す変わりに、互換あればGetDC(0)でやりたかったってことだろ。
テキストボックスコントロールでTABを入力したいのですが、
どうすれば可能ですか?
メモ帳に入力したタブをコピペする
"\t"
Cで作る時、いつもはWebにある雛形のWindowプログラムをコピペして、ウィンドウプロージャやCreateWindowの引数だけいじっていたのですが、
C++を最近学び始めて、GUIを作ってみようと思ったんですが、Webの雛形はCで書かれているので、このまま使うのも・・と思っています。
もちろん、cppでもコンパイルできたのですが、C++を生かした作り方があるのかなと悩んでいます。
Windowプログラミングの仕組みはある程度は分かっているのですが、やはり分からない部分もあるので自分で1から作るというのも不安です。
C++で作る時は、C++用の雛形を作ったほうが良いのでしょうか?
MFCかSDKか迷ってるってこと?
それとも初期化やら描画関連やらプロシージャから全て1から作ろうとかってこと?
全て1からということです。
ウィンドウ周りはCと同じように書くか、規模のでかいフレームワークに
なるかの二択だと思う。
c++はcのスーパーセットなので別にcの奴を引き継いでもかまわないんじゃね
MFCやATL/WTLを使用しないならそれこそスタンスの問題
ありがとうございました。
かなり難しいことになりそうなのでCのを引き継ぐことにします。
>>288 wxWidgets とか GTKmm とか
case WM_PAINT:
BitBlt( hDC, 100, 100, 256, 256, hCompatDC, 0, 0, SRCCOPY ); // bitmap表示
hdc=BeginPaint(hwnd, &ps);
draw(hdc,&drg); // LineToを使ったたくさんの線の描画
EndPaint(hwnd, &ps);
break;
こうすると、bitmapの上にLineが引かれると思ったのですが、
Lineのうえにbitmapがあるように表示されます。
これはなぜですか?
BeginPaintする前にどこに書いてるの?
hDC==NULLだとするとルートウィンドウ(=デスクトップ)じゃないか
hwndの中のつもりなんですけど。
(お察しのとおり初心者です)
PAINTSTRUCT ps;
HDC hdc;
static HBITMAP hBitmap, hPrevBitmap; // ビットマップのハンドル
static HDC hDC, hCompatDC; // デバイスコンテキストハンドル
(中略)
case WM_CREATE:
(中略)
// ビットマップをファイルからロードする
hBitmap = (HBITMAP)LoadImage( NULL, "xxx.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
if( hBitmap == NULL )
{
MessageBox( hwnd, ("ビットマップのロードに失敗しました"), ("エラー"), MB_OK | MB_ICONWARNING );
return 0;
}
// ウィンドウのデバイスコンテキストハンドルを取得する
hDC = GetDC( hwnd );
// メモリデバイスコンテキストを作成する
hCompatDC = CreateCompatibleDC( hDC );
// ロードしたビットマップを選択する
hPrevBitmap = (HBITMAP)SelectObject( hCompatDC, hBitmap );
return 0;
break;
いちおう、bitmapもアプリのウィンドウ内には出てます。
どうしてそうなるのかを聞くよりやりたいことを聞いた方が建設的だと思うんだけど
なんで、線はちゃんとhdcに書いてるのに、BitmapはhDCに書いているんだ。
というか、この二つの変数名なんとかしろよ。
GdiFlush?
えー、やっていることは、ですね、
もともとある(本のCDについてた)たくさんのLineを書くプログラムに
WEBサイトに載っていたbitmapを表示させるコードをくっつけてみた、
というところです。
どちらもそれぞれちゃんと表示されているのですが、
bitmapの上に線が描かれると思った予想が外れたので
聞いてみました。
hdcとhDCの件、どう統一させたらよいのでしょうか。
(片方の変数名の変更だけということでよいということでは
なさそうですよね?)
>>303 BeginPaintの吐くhdcでBitBltすればいいだけ
おお、すいません、変数名変更しただけで、ちゃんと
bitmapの上に線が載りました!!
大変お騒がせしました。どうもありがとうございました。
>>304 すれ違いになりました。
これでもうまく行きました。
もうちょっと勉強しますです。
ありがとうございました。
VS2005 のダイアログボックスに EditBox を追加して使おうとしたときに;
表示してEditBox で左クリックをするとダイアログが閉じてしまうんです。
もともと VC6 で作成してあった EditBox(TextBox) は問題なくつかえるのですが;
新たにそこに追加した場合もだめになるんです。
そのついかした EditBox に WM_INITDIALOG で文字列を設定しようとすると
ダイアログ自体が開かないんです。VS2005 で何か変わったのでしょうか?
.RC をみても以前と変わらなく見えるのですが?
マニフェストファイル追加したらツールバーのチェックボタンの文字色が白色になってしまい
見辛くなってしまったのですが、色を変更するにはオーナードローするしかないんでしょうか?
どうして魔乳笛素屠ファイルを削除しないんだ
今時ヴィジュアルスタイルに対応してないソフトなんてダサくて使えねーよ
今日1日、本当に疲れています(笑)
VS2005 で EditBox を追加すると全く使えないんです。既存のは動くんですけど
それをコピーしたものはうごかない。 .RC 見てもそっくりなんですけど;
なんとかヒントをお願いします。
>>307 &
>>311 VC6から移行したときに何かの拍子で
リソースのIDがバッティングしてしまってるんじゃないか?
とぐらいしか言えないな。
とにかくソースを持ってるのは自分だけなんだから
ブレークポイント置くなりして調べないとな。
Unicodeの罠
315 :
デフォルトの名無しさん:2008/03/15(土) 01:40:55
311 です。
動きました。
どうやら、コンパイラかリンカーのバグのようです。ちょっとひどいバグでした。
最初から Unicode がらみとか、ダイアログのフォントからみかと思ったのですが;
動くダイアログを動かない場所で呼び出すと動かないので、スタックかと悩んだり
していました。
結局リソースもいじらず、ソース位置(呼び出し場所、方法)も変えずになおりました。
コンパイルオプションもリンクオプションもいじらずに。。
ソース上はなんの問題もありませんでした。
巨大なプログラムではないのですが;
(単一exe 非mfc 12万行ぐらい)
1日、無駄でした。
VS2008 を買おうか検討します。
脳味噌を買い換えるべきだな
スペアの脳欲しいんだけどどこにも売ってないみたい。
そんなバグがあるなら今頃大騒ぎにw
おまえらのバグによる虫食いだらけの人生を先にどうにかしたほうがよろし。
もうすでにリリースされちゃってるので修正は不可能だ。
SPをあてるという手もあるが、たいていの場合はそのSP自体が輪をかけてクソなうえ、
こっちの各種のプライベートコンポーネントを破壊していく。
アンインストールなんざしようもんなら、恒久的にリソースリークを引き起こす始末。
最低だな。
そもそもまだβリリースです
最新のWindows SDKって6.1でいいのか?
糞でかいから古いの落としてたら悲惨だわ
thx
やっとインストールおわったんだが、
どうやらDirectX SDKも必要なようだ
VCEE、WSDK、DXSDK
これだけあればウインドーズアポリはほぼ作れる。イヤッホウ!
あとはWin32APIの知識だけだな!
C/C++の知識も必要だな
Dでもおk
Dでないとダメ
細かいなw
CreateCompatibleDC() に CreateCompatibleBitmap() を SelectObject() して
オフスクリーンで描画して、元のDCの BITMAP と切り替えるなんてことはOK?
BitBlt するより早くなると思うんだけど。
SelectObject() の説明に
「この関数は、指定されたのと同じタイプで、それまで選択されていたオブジェクトを返します。
アプリケーションは新しいオブジェクトを使い終えたら、必ず元の(既定)オブジェクトに置き換えるべきです。」
と書いてあるから駄目かな?
やってみればわかるけど物凄く無駄な行為
BitBltすればええやん
>>334 ビットマップを選択できるのは、メモリDCだけ。
>>334 DCを物凄く誤解してる。
DCがビットマップデータを持っているわけじゃないよ。
>>334 ならないよ。
てかね、Windowsの製作者はお前さんより数段上だと思っときな。
そんなこた考慮済みで作ってんだよ。
ちなみにならない理由は物理的な問題なんでどうやっても回避不可よ。
OSの癖で多少の違いは出るかもだけど。
340 :
デフォルトの名無しさん:2008/03/17(月) 01:03:01
ツリービューコントロールで、チェックボックスがチェックされたときに
その hItem ハンドルを取得するにはどうすればよいのでしょうか?
>>340 WM_NOTYFYを受け取ったら通知IDをチェックする
>>341 そのサンプル、TVN_KEYDOWNへの応答が抜けてるし
Spaceキーを押してチェックマーク付けた時はスルーかよ
相変わらずいい加減だなぁ
そういや昔VirtualPC2004で設定ダイアログのリストビューを↑↓キーで行き来するとバグってたのを思い出した
最近は直ってるのかな。もう使ってないから知らんけど
恥を忍んで質問させていただきます。
UNICODE文字がアルファベットか数値かなどを調べる方法が分かりません。
GetStringTypeWという関数を見つけたのですが、デバッグしてみたところ
第4引数のLPWARDに格納されたのは644という数値で16進表記でもC1_DIGITなどに
の定数の値に当てはまりません。教えてください。
お願いします。
iswdigit と iswascii とかどうかな
WideCharToMultiByteでASCIIに戻して文字コードを調べるとか
ASCIIに戻さなくてもそのまま文字コード調べればいい
iswasciiの実装がそれ
644=0x284=C1_DEFINED | C1_XDIGIT | C1_DIGIT
GetStringTypeWの説明ぐらい嫁
>>346>>348 こんな関数が搭載されているとは思いませんでした。
mbstowcs_sとかUNICODE企画ってうざいですね。
>>349 すみませんでした。たくさん定数あったんで読み逃してましたorz
むしろ俺はMBCS捨てたいよ
まぁしばらく無理だけど
>mbstowcs_sとかUNICODE企画ってうざいですね。
恥を忍んだ割には随分な物言いだな。
お前らに言ったわけじゃないだろハゲタコが
恥を忍んだというよりは、恥を晒したようだな。
恥を忍んでるんだから、恥なのは判るってるだろユデダコが
357 :
340:2008/03/17(月) 17:34:26
>> 341 のサンプルを参考に、以下のようにしてみましたが...
lpnmh->idFrom の値が 0 になってしまいます? ちなみに BCC32 なのですが
分かる方いますか?
case WM_NOTIFY: /* TreeView control からの通知メッセージ */
lpnmh = (LPNMHDR)lp;
if((lpnmh->code == NM_CLICK) && (lpnmh->idFrom == IDC_MYTREEVIEW))
{
.
.
.
"晒した"に突っ込んでんだろタコ。恥は元々晒してんだよ。
だから、恥を忍んでないんだから嘘を書くなよ。
はいはい落ち着きたまえ
>>357 IDC_MYTREEVIEWが0って落ちはないよね?
lpnmh->codeはちゃんとNM_CLICKになってる?
>>357 バグのあるソースを参考にするのは(ry
typedef std::map<std::string, std::vector<std::string>> > data;
なんでVC6は > を一個多く付けないと怒られるんだぜ?
VC7は普通にエラーと申しておるし、どういうことですか?
スレタイを見て深呼吸
>>364 typedef std::map<std::string, std::vector<std::string> > data;とするとどう?
テンプレートを閉じるときには>>と書けない。>>という1つの字句と解釈されるから。
C++0xで改善されるみたいだけど。
>>367 スレ違いに回答する阿呆はお帰りください。
_, ._
( ・ω・) now shibakaring ...
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)WWWWWWWWWWWWWWWWWWWWWWW (26%)
お帰りなさいませ、ご主人様
なにこれ
自演UZEEEEEEEEEEEEEEEEEEEEEEEEE
自演だと思われるから俺にレスつけるんじゃねえよ
以下日付が変わるまで書き込み禁止
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
>>367 言ってみるものだ、地味に助かったわ。 d
自演 The End
dじゃねーよそんなのC++やってりゃ常識だろうが
軽口叩く前にベッドの中で入門書でも読んでろよこのHP3の雑魚グラマが
_, ._
(・ω・ ) now shibakaring ...
○={=}〇,
|:::::::::\, ', ´
wwwwww、、、、、、し 、、、(((.@)wwwwwwwwwwwwwwwwwwwwwww (19%)
>>383 お前は俺か
俺も丁度コンパイルエラーで悩んでいた所だったから助かったよ。
なにこの自演地獄
とレスすると自演だと思われる地獄
いい加減自演うざい
自演がキモイのでやめてもらえません?
自演ど
ちんこ
何書き込んでも自演になると聞いて飛んできました
インプレースアクティベーションがさっぱり分からん。
クライアント側はどうやって実装すりゃ良いの?
そうですかお帰りください
パソコンの前でしかいきがることができない人がいるスレはここですか?
超伸びてるなと思ったらなんだこれwww
ダイアログに List ボックスを貼り付けて LB_ADDSTRING した場合
ダイアログ破棄時に LB_DELETESTRING しないと メモリーリーク
するのでしょうか?
しない
実は std;;string の文字列を
.c_str() で LB_ADDSTRING していると、メモリーリークするようです。
ダイアログ破棄時に、ちゃんと LB_DELETESTRING すると直るんです。
>>404 :と;を間違えるぐらいだから他の部分でトチ狂った事してるんだろ
>>400 「しかいきがる」って何?
そんな日本語ねーよ。
国 へ 帰 る ん だ な。 お 前 に も 家 族 が い る だ ろ う。
つまらんレスしてる奴はVIPあたりに帰ってくれないか
>>406 そんな品詞分解する日本人いねーよ。
国 へ 帰 る ん だ な。 お 前 に も 家 族 が い る だ ろ う。
>>409 > お 前 に も 家 族 が い る だ ろ う。
いません… orz
Win32APIがこの先生きのこるには
ひらがなの句読点問題は十分認識されているから気にしないのだが
分かち書きしないハングルとか何故普通に読めるのかナゾ杉る
How should Win32API mushroom this teacher?
_, ._
( ・ω・) now shibakaring ...
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)WWWWWWWWWWWWWWWWWWWWWWW (26%)
now mowing
>>412 実は普通に読めてないようだが。
つ 機能性文盲
それは別の問題なんだよ
>>412 ハングルは、日本語のカナと違って漢字一文字で一文字だからな。
勿論、同音異義語は山の数。
じゃ別に漢字そのまま使ってりゃ良いじゃん
なんでわざわざ暗号化したんだろ?
表音文字の方が覚える文字の数が少なくて済むからだよ。
仮名もアルファベットも同じ趣旨の元に生まれた文字。
当時の愚民は漢字教育なんて受けられなかったからな。
419の言う様にそのまま置き換えたから、表音文字の癖に縦横に
組み合わせないといけないややこしい物になっちまってるが。
3月18日 「自演は誰だ?」
3月19日 ハングル講座 -歴史編-
もはやWin32APIスレとは言えないな・・・
ハングルはまぁ機能障害云々や簡略化した筈が一万文字出来たニダ等で問題外としても
カナ文字ってかなり変な仕組みな文字だと思わね?
他所でやれ
嫌です
他所でやれ
いい加減にしろ
429 :
三木支:2008/03/19(水) 08:51:03
「ハングル」板へいらっしゃ〜い。
SetRectとかCopyRectって何のためにあるんですか?
わざわざ専用の関数用意しなくてもいいような気がするんですが…
こういうのがあるってことは、できる限りこれらを使った方がいいんですか?
Win95からあるみたいだから昔は使ってたんじゃないか?
今は知らんけど。
別にわざわざ使う必要も無いと思う。
>>430 まったく同じ処理するんだったら使った方が分かりやすいかな
InflateRectはよく使いそうな気がする
そうすると他のも使う
>>430 lstrlenとかlstrcpyって何のためにあるんですか?
わざわざ専用の関数用意しなくてもいいような気がするんですが…
こういうのがあるってことは、できる限りこれらを使った方がいいんですか?
世の中の開発言語がなんでもC/C++ではないってことよ
ステップ数がどうたらとかマニアックな話になりそうですね
ゆでたまご切り機みたいなもんだと思ってる。
包丁一本で何でもできる人には不要だけど、そうじゃない人には手軽。
描画処理で使うから高速化が目的かもね
某流出コードみたらWindowsの中の人も使ってる
>>443 Windowsの中の人が必要と思ってるから、APIがあるんじゃないのか?
InternetOpen→InternetOpenUrlで指定したurlのページの容量を知るにはどうすれば
できますか?
実際にデータを受信してサイズを確認するか、エスパーになるかすればいいと思うよ。
Windows の中の人が必要と思っても、隠し API にしかならないこともあるんじゃないかな。
>445
ヘッダ
隠しAPI(笑)
hotplug.dllとか隠しAPIは山ほどあるがさっぱり公開が進まないな
EUにもっと暴れてもらわないと
隠しAPI(笑)
何かキチガイのツボにハマるんだろうか。隠しAPIって。
>>416 正直スマンカッタ 些細な疑問だったんだ。 反省してる。
だが謝らない。
非公開とかundocumentedって書くのが玄人
そうでないのは語彙が乏しくてガキっぽいよねww とか
ってここ何のスレだっけな
そもそも今後消える可能性があるから非公開なんじゃねーの
ベータ(SONY)みたいな
隠しというの表現は不公正に隠蔽しているというニュアンスだろ
シェル関係でなんのために公開されているのか分からないAPIをよく見かける。
Windows 2000あたり限定(XPやVistaでは使えない)で、ほかの公開APIで代替が効く。
例えばSHFlushClipboardとか。
MS嫌いのヨーロピアンが
「非公開API使って競合企業を出し抜いてるよ!ずるいよ!」
って訴えるためにあるAPI
リパースポイントやハードリンク関連は隠されてるな
>>458 …なんかGPL厨みたいな言い分だ
MSを擁護する気はさらさらないがこういうのも好きじゃないなあ
>>457 SHFlushClipboardならXPにもあるみたいだが
で、2000の奴を逆汗してみたら
jmp OleFlushClipboard
の一行だけw 何の為にあるんだww
別名作りたかっただけじゃないかな。
エクスポートテーブルでフォワードできるのに
SHFlushClipboardの他にもole32.dllに飛ばすだけの非公開関数があるようだ
shell32!SHRegisterDragDrop → ole32!RegisterDragDrop
shell32!SHRevokeDragDrop → ole32!RevokeDragDrop
shell32!SHFreeUnusedLibraries → ole32!CoFreeUnusedLibraries
どうやら95時代のshell32.dllが、対応するole32.dllのAPIをLoadLibrary/GetProcAddressで
遅延ロードしてアクセスする為のヘルパ関数として用意していたのを後方互換で残しているだけらしい
だから2000以降では全く意味が無いようだ
だったら最初からそう書いとけっつーの
たしか、win95には、ole32.libをロードしなくてもすむ、
Shell用の軽量疑似OLEシステムがあったとかなんとか
機器の抜き差しの検知方法について質問します。
VS2005のVC++でMFCを使ってプログラムしています。
USB機器の抜き差しについては、ぐぐったら
WM_DEVICECHANGE
DBT_DEVTYP_HANDLE
RegisterDeviceNotification
などのキーワードが出てきたので、それらを試して検知できることを確認しました。
結局、DBT_DEVTYP_HANDLE構造体のdbch_handleには
HIDデバイスのハンドルを渡したら上手くいきました。
しかし、DVI-Dで接続されたモニターの抜き差しを検知する方法がわかりません。
WM_DEVICECHANGEは飛んできます。
しかし、wParamにはDBT_DEVNODES_CHANGEDしか入ってきません。
USBと同じやり方でできないか、と思ったのですが
dbch_handleに何をセットすれば良いのかがわかりません。
EnumDisplayMonitorsで取得できるモニターハンドルではダメでした。
すみませんが、WM_DEVICECHANGEの中から、DVI-Dの抜き差しだけを検知する
やり方をぜひお教え下さい。
それとも、そのようなことは不可能なのでしょうか・・・?
>>464 それを知るためにはThe Old New Thingを読まなければならないってどうなのかね
俺はあれの邦訳本高くてまだ買ってないや
しかしなんであんな邦題なんだろう
>>467 いや、
>>464の内容は自力で解析してみただけなんだがw
The Old New Thingに書いてあるか?
``its own miniature drag-drop loop, ''
ってことで言及はされてるけどね
EDITやBUTTONなどの子ウインドウは、WM_COMMANDやWM_NOTIFYを親ウインドウに送ると思いますが、
親じゃなくて、特定のプロシージャに送ることはできますか?
WTLのメッセージマップでも使え
474 :
デフォルトの名無しさん:2008/03/20(木) 11:56:36
このスレの住人なら知っていますね、あの糞開発ツールのことを
・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる
糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。
・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
バグレポートなどしてはいけません。改善要求などもってのほかです。
あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
なんて話が出たら力強く机を叩き、会議室を出ましょう。
あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。
糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
こんな風に病みたくはないのものだ
>>474 つまり、自分が納得できる物を、自分で作って使えと言うことか?
コピペだからシカトしとけ
Windows系はそうでもないが組み込み系は未だに
糞開発ツール多いよな
競争がないからな
480 :
デフォルトの名無しさん:2008/03/20(木) 13:45:08
そういえばWindows95のころはいろいろ糞開発ツールあったね
特に「簡単に画面が作れます」系が糞でダメだった
delphiとかbcbとかだな
.NET1.1のWindows.Formsより糞な物は見た事がない
あまいよ
組み込み系なんか遥かに糞な開発ツールが今でも使われてる
いや、そういうのいいから
スレッドタイトルも読めないようなゆとりの知能レベルに相応の開発ツールしか
提供されてないわけだw
DeviceCapabilities() についてです。
ざっと調べたのですが、どうもDEVMODE構造体を渡す場合の正しい使い方が確信できません。
わからないのは、
・pDevMode は、それが指す構造体の値を関数に渡すために使われるのか、
構造体に関数が値を書き込むために使われるのか、
あるいはその両方なのか(そうだとしてどれがreadでどれがwriteなのか)
・もし pDevMode の dmField メンバが取得する値を決めるとしたら、
その場合 fwCapability は無視されるのかどうか、
また要求する値は pDevMode に書き込まれるとして戻り値はどうなるのか
です。お願いします。
完璧にconstを見落としてました、失礼しました。
要するにDevice〜()はpDevModeの中身を吐き出すだけなのですね。
ではDEVMODE構造体に目的の値を得るにはいったい何の関数を使えばよいのでしょうか。
デバイスコンテキストに値を渡すにはResetDC()を使えばよいというのは分かるのですが、
逆にデバイスコンテキストから値を引っ張り出す関数がわかりません。
489 :
488:2008/03/20(木) 15:34:06
DocumentPropertiesって一番下に書いてました。すみませんでした。
MP3の再生もできない上に音の重ね合わせもできない上にJPEG画像の表示もできないなんてWIN32APIって糞杉wwww
そうですね
ホビープログラマは大変ですね
492 :
デフォルトの名無しさん:2008/03/20(木) 17:28:10
エディットコントロールから
改行まで文字列を取り出そうとしているのですが、
\r\nがなぜか見つかりません。
これはなぜなのですか?
>>490 ・MP3再生
DirectShow、ACM
・音の重ね合わせ
MIDIでも鳴らしとけ
・JPEG
OleLoadPicture、GDI+
>>490はエロゲスクリプターだと思われ
もしくはHSPとかTTSナントカとかひまわり
>>492 エディットコントロール内と検索文字列の文字コード違うんじゃない?としか言いようがないわぁ
コード貼ってよ
496 :
デフォルトの名無しさん:2008/03/20(木) 19:57:53
#define Write(s) SendDlgItemMessage(hWnd,IDC_EDIT,EM_RELACESEL,0,(LPARAM)((LPSTR)s))
Write("test");
Write("\r\n");
という具合です。
498 :
デフォルトの名無しさん:2008/03/21(金) 01:50:38
C++でWindowsXPのプログラムを作ってるんですが、
intのサイズってどこで決まるんでしょうか?
OSのバージョン?CPU?
WindowsXPだと普通intは32ビットでしょうか?
500 :
498:2008/03/21(金) 01:59:48
intを使いたいのは、速度と移植性のためです。
LONGやDWORDでも、スピードがほとんど変わらないなら、
intは使わないでもいいかなと思いますが。
LONGやDWODなんてただのtypedefなんだから何かなるわけないだろ。
502 :
498:2008/03/21(金) 02:01:42
そうなんですか。ありがとうございます。
>>500 移植性のためなら LONG や DWORD をどうぞ
そんな事がわからんレベルでスピードがどうの言ってもしょうがない
確かWin64だとintは32ビットのままでINT_PTRが64ビットになるんだっけ
VC++ならsize_tとポインタ以外は32/64関係なくサイズ固定だったと思う。
プラットフォームで切り替えたいなら、プリプロセッサで定義変わるようにしとくといい。
とりあえず64bit環境を準備するんだな。実際作って動かしてみればわかる。
64ビットのint型ってなんかたくさんない?
俺は__int64っての使ってるんだけど
何が標準なのか判らない。
__int64 はVC++などの独自拡張
C/C++の標準ならC9Xならstdint.h に int64_t があるかも知れないが無いかもしれない
標準というわけではないがWin32APIスレとしてはbasetsd.hのINT64やUINT64が無難だと思う
そうだったのか
DWORDとULONGでいちいちキャストしなきゃいけないのがうざい
中身同じだろ
どっちも元を辿ればunsigned long (32ビット)なんだから、
キャストしなくても警告なしでコンパイルできると思う。
お前が個人的にそれを気持ち悪いと思ってキャストしているというのならともかく。
512 :
デフォルトの名無しさん:2008/03/21(金) 10:46:35
漢字の第一バイトを識別するAPIを教えてください
今時SJISとか使うの?
IsDBCSLeadByte
515 :
デフォルトの名無しさん:2008/03/21(金) 10:54:35
Unicodeにすると単純計算でメモリを2倍食うことになるのがなぁ
サロゲートペアとか考慮するとMBCS程ではないが面倒には変わりないし
とか言いつつ最近は殆どUnicodeビルドだしサロゲートペアなんて全然考えてない俺w
てめーが死ね
お前はもう死んでいる
おれももう死んでいる
Vistaのタスクマネージャのコマンドライン列と同じようなものを作りたいのですが、
プロセスのIDかハンドルを元に、起動引数を取得するAPIは無いのでしょうか?
過去スレでは
1、CreateRemoteThreadで対象プロセスにdllを注入し、
2、GetCommandLineで引数を取得。
3、その情報をプロセス間通信などで送信
という方法が示されていましたが、
1の処理がLoadLibraryのカーネル上でのアドレスが全プロセスで共通であることに依存しており
もし、LoadLibraryのアドレスが異なれば対象プロセスを異常終了させてしまうという危険なものでした。
できれば、この方法はとりたくないので、APIが用意されていればいいのですが・・・。
> LoadLibraryのカーネル上でのアドレスが全プロセスで共通である
確か決まってたはず
VistaはOS(notプロセス)を起動するごとに変わるんだっけ?256パターンで。
1. 最初にDLLがロードされたときに決まる
2. 1つでもそのDLLをロードしているプロセスがある間、他のプロセスがロードしてもアドレスは変化しない
3. 全プロセスからアンロードされたら、次にロードされたときにまたランダムに変わる(1.へ)
こんな感じだったと記憶している
1の処理をLoadLibraryのカーネル上でのアドレスが全プロセスで共通であることに依存させる必然性がない
527 :
デフォルトの名無しさん:2008/03/21(金) 18:31:58
黙れブタ野郎!
うるせーばかどっかいけ
Vistaではセッションごとに異なる。
つまり別ユーザがリモートデスクトップとかで入ってきた時のプロセスはロードアドレスが異なるものになる
530 :
529:2008/03/21(金) 20:42:28
PEBから取れそうだなーとかおもって調べたらずばりのが出てきた
http://www.codeproject.com/KB/threads/GetNtProcessInfo.aspx NtQueryInformationProcessでPROCESS_BASIC_INFORMATION拾ってきて
PROCESS_BASIC_INFORMATION::PEB::RTL_USER_PROCESS_PARAMETERS::ImagePathName.Buffer
(要するにプロセスがコマンドラインを保存しているアドレス)をReadProcessMemoryするっぽ
ただPEB構造体はDDKでも非公開だった気がするからそこは注意
なんでそんなに頭いいの
実装に必要な部分はちゃんと公開されてる罠 orz
533 :
521:2008/03/21(金) 20:53:56
>>521の質問ってスレが立つたびに見かけるね
他プロセスのコマンドライン文字列を取得して何に使うのか知らないけど、MSもいい加減
DWORD GetCommandLineEx(HANDLE hProcess, LPTSTR pszBuffer, UINT cchBuffer);
を用意すればいいのに
何に使うんだよ
ウイルス作りたくて
悪用するなヤメレ
本気で言ってるならやめれ
冗談で言ってるなら面白くないよ
うわーすげー
流し読みじゃ何のことかさっぱりわからん
乙
でもなんでこんなに読みにくいんだろ?
>>539 とりあえず適当に突っ込んでみる。
・pszBufferにNULLを渡すと落ちる。
必要な文字長(終端の'\0'を含む)を返すべき。
・NtQueryInformationProcessに失敗したときにRtlNtStatusToDosError/SetLastErrorしてない気がする。
・というか所々SetLastErrorすべき所が抜けてる。
543 :
r:2008/03/22(土) 10:18:47
質問させてください。最近純粋なC言語を勉強して
はじめて VisualC++ 2005 Express Edition(無償配布なアレです) に手を出した者です。
デバッグ用に MessageBox使うのが嫌だったのでOutputDebugStringを使おうと思い
PSDKもいれinclude や lib などのパスの設定もし
#include <windows.h>として
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//this->button1->Text = "てすと"; /* これは今まで使ってた応急処置的な出力 */
OutputDebugString("test");
}
試しにこのように ボタンをクリックしたらデバッグ画面に出力するようにしたのですが、ボタンを押下しても何も表示されません。なぜでしょうか?(エラーもまったくでません 押しても反応なしといった状態です)
もしかしたらリアルタイムに対応していないのでは?とも思いましたが、×で閉じた後もやはり何も出力されていません。もしこの方法で意図通りのことができないのであれば他に何か方法はありますでしょうか?
イメージ的には#のConsole.WriteLine();のようなことがしたいです。よろしかったらご教授ください m(_ _)m
過去ログ読んでもよくわからなかったので質問します
EDITコントロールの背景透過表示はできないのでしょうか?
WM_CTLCOLOREDITで
SetBkMode(((HDC)wp), TRANSPARENT);
return (LRESULT)GetStockObject(NULL_BRUSH);
とすれば一応背景透過になりますが、スクロールした場合など、文字部分が再描画されません
>>543 .Netで書いてるなら、.Netでデバッグ出力すればいいかと
System.Diagnostics.Debug.WriteLineじゃダメなのか?
>>545 仰る通りSystem.Diagnostics.Debug.WriteLineで意図通りのことができました。
ありがとうございました^^
Win32APIスレで.NETの質問をする馬鹿と誘導せずその質問に真面目に答える馬鹿(笑)
OutputDebugStringはWin32API
しかしなぜVC8なんだ。
すでにVC9が、もちろんタダで出ているというのに。
W2k で使えたっけ?
DialogBoxでキーコンフィグを作っているんですが、
エディットコントロールって言うんですか?あのテキストが入力できるやつにフォーカスが合ってるときに
システムキー以外の何かしらのキーが押されたら、そのコントロールに対応してるキーの値を
変更しようと思ってるんですが、WM_KEYDOWNみたいなメッセージは受け取れないんでしょうか?
それと他のコントロールにフォーカスを自動で切り替えるには何を使えばいけるでしょうか?
できればジョイパッドの入力も使いたいのですが、ダイアログボックスでメッセージ以外の
処理をする時は別スレッドでも作って何とかするしかないんでしょうか?
素直にサブクラス化してくれ
ここでそれが出てくるわけですか・・・
むずい><!頑張る!
他のプロセスのウィンドウの上部のメニューの一部を書き換えたいのですが見当が付きません。
ヒント等いただければ幸いです。
ヒント ウイルス
メニューの実装は一様じゃないから汎用的な実装ができるとは思えない
メニューに見えてるだけの可能性もあるしね…
まずスパイで解析しる
すこし調べてみたら希望の動作をすることが出来ました。
お騒がせすみません。どうもありがとうございました。
>>542 >pszBufferにNULLを渡すと落ちる。
Win32APIでもNULLを渡すと落ちる関数があるから別に関数側でやらなくてもよくね?
APIってどうやって作るのかな?
やっぱWindowsを作った男たちでないと
作れないのかな。
FindWindowと同じの作れと言われても仕組みがわからんし
FindWindowならEnumWindowsやGetWindowでつくれるんでない?
逆汗してコード調べれば何してるかはわかるよ
たぶん途中でカーネルオブジェクトのハンドルテーブル見に行ってるんだろうけど
それと同じコード書けば良いだけ
単にAPI作りたいってんならDLL吐けばヨロシ
なんでWin32APIと同じ関数を作る必要があるんだ?
バグがあって仕方なく、というなら分からなくはないが
バグがあるんじゃね。脳に。
それは湧いているという
ロードしたDLLってプロセスごとにメモリ上に展開されるの?
それとも同じDLLロードしたら同じ物理メモリを参照するのかな
される
Copy on write
初期は共有してたけど、
色々問題があったからプロセスごとに展開するように変更されたと記憶している。
されるけどそういう考え方はしない方がいい
Win95 あたりは共有されてなかったっけ?
NTカーネルが分離で95カーネルは共有
Meがどうだったかはしらんけど98SEは共有
じゃあDLLを使ってデータの共有はできひんのか
ファイルマッピングオブジェクトでも使え
他にもWM_COPYDATA、グローバルアトム、レジストリなど
FMOでおk
OSが上手くやってくれるから気にすんな
#pragma data_seg (".myseg")
int i = 0;
char a[32]n = "hello world";
#pragma data_seg()
char a[32]n ←この n の意味がわからないんだけど
>>579 試せば分かるが n を書かないと共有されない。
誤植
MS の独自拡張としか言えない
エイプリルフールネタとしては秀逸な気がする。
どっちなのー
どこ探しても見つからないのでここで質問
SDKでレジストリを監視する方法とディレクトリツリー、またはファイルを監視して変更(名前の変更や内容の変更)を禁止する方法の2つを探しています
後者は変更を通知するAPIならあったんだけど変更をさせないで通知する方法とかないんかなと
どなたかわかる方いましたらよろしくお願いします
>>586 アクセス権つければ禁止できるんじゃないかな。
そういうときにNTFSのアクセス制御というものがあるんじゃない?
>>587 読み取り専用にするって事??別に読み取り専用にして他のプロセスが属性変更したら再度読み取り専用にするって感じでもいいんだけど、ほぼ完全にアクセスを遮断してみたい
>>588 今調べてみたけどよくわからんから、ちょっと試してみます
ありがとうww
完全にアクセスを遮断、なんてサービスかドライバを作らないと無理だろう
ACLを書き換えてもExplorerやRegEditで弄れるし
なんかマルウェアくさい
そりゃAdministratorsかCREATOR_OWNER(だっけ)使えば弄れるけどさ
APIフックでできへんのか
>>591 万が一質問者がマルウェアの類を作っているとしたら、この手の質問に回答すると共犯とか幇助って事になるのかな
犯罪行為だとして、フツーあの質問からは予知できないから
共犯関係は成り立たないはず。
ここがマルウェア作成スレだったら微妙
今の日本の法律ではマルウェアの作成で罪に問われることはない。
ウイルス作成罪ってまだ成立してなかったっけ?
まだ。
CLANNAD ウィルスも罪状は著作権法違反。
基本的な質問です、メニューからどんどんウィンドウを開いてゆく場合などは
どうするのでしょうか? 最初のメニューから関数呼んで新しいウィンドウくらすを
どんどん登録して処理するのですか? 全体的な流れとして??
>>599 そうみたいだなぁ
仮に成立したとして、システムに介入するタイプのソフトがワクチンのヒューリスティック検知に引っかかるとか
シェアウェアのロジックボムとかもマズいのかな
フォーマット シー
って書いたらタイホです
format ℃は器物損壊か
さすがに善意の提供者は対象外だろう。
悪意がないことを証明するために捜査を受ける必要があるかもしれないが。
それを判断するのは裁判所ということになっていましてね
そして被告==犯罪者というのが日本の社会通念でして
このスレに書き込むと犯罪者になりますので注意
_, ._
( ・ω・) now shibakaring ...
○={=}〇,
|:::::::::\, ', ´
、、、、し 、、、(((.@)WWWWWWWWWWWWWWWWWWWWWWW (26%)
ここの質問って、右も左も分からない初心者か、ウイルス作ってるんじゃねーのという内容か
どちらか一方に当てはまる質問しか出てない気がするw
フックの質問は多いな
アッパーを教えてください
高橋ジョージにでも聞け
リソーススクリプトでは、標準のコントロールを配置する
ようなダイアログボックスを設計できます。
同じようにメインのウィンドウに対してリソーススクリプト
で標準のコントロールを配置することはできないのでしょうか?
IDEでも使って下さい
環境スレで
>>616 IDEを使いたくないのです。
できないということでしょうか?
メモ帳でも出来るがダルイぞ
ダイアログをメインのウィンドウにすればいいじゃん
MFCのフォームビューが出来てるんだから出来るんじゃね
APIスレならCreateWindowExでコリコリ行くべき
622 :
デフォルトの名無しさん:2008/03/24(月) 05:56:16
ファイルをディスクキャッシュに乗せないように読み込む方法教えてください。
システムキャッシュならAPIでできるが、
ディスクキャッシュは、そもそもできるのか?
つ FFC
CreateFileでFILE_FLAG_NO_BUFFERING?
>>613 CharUpper / CharUpperBuff
強烈なアッパーを放つ事ができました!
クスリでもやってるの?
駄目だよ手出しちゃ…
LoadCursorやLoadIconが更迭されてLoadImageを使うようになった理由を誰か知ってたら教えてくれ
派閥争いだろ
LoadCursorはともかく、
LoadIconは小サイズのアイコンが読み込めない時点で明らかに機能不足。
だが、通常サイズのアイコンにわざわざLoadImage使うことも絶対にないな。
じゃあ逆にフックを防ぐ方法を聞くのは合法か?
キーフック無効にするソフトとかあったら
キーロガー怖くなくて嬉しいかもしれない
nProtect GameGuard
hookguardってのがあってSetWindowsHookExのグローバル呼び出しフックを検出するコードを公開されてる
どっちかってーと概念実証のにおいがしたり、解説サイトがロシア語だったりするけど
変な日本語になった('A`)
ピーカブースタイルでダッキングでフックをかいくぐり華麗にアッパーをお見舞いしてやれ
>622
FILE_FLAG_SEQUENTIAL_SCANも必要かも?
>>638 それはキャッシュマネージャ用のヒントなのでFILE_FLAG_NO_BUFFERING使ってるときは関係ないはず。
まあ単なるヒントなので付けておいて悪いということもないけれど。
今後最適化に利用される可能性がないとも言えないし。
641 :
デフォルトの名無しさん:2008/03/25(火) 03:23:26
今日、自分がどの仕事にどれぐらい時間を使ってるか
知りたかったからキーロガーで計ってやれとダウンロードしようとしたら
圧縮ファイルを落としてきた時点でNortonに削除された
もし、キーロガ作ったらやっぱ削除しやがるのか?Norton先生
フォルダ除外とかできるんだろうけどさ
フック検出かあ
自分自身が依存してるモジュールのリストを持っておけば
PSAPIで列挙してフック用のモジュールを検出できるかも
644 :
デフォルトの名無しさん:2008/03/25(火) 06:27:57
んでもWH_KEYBOARD_LLのフックは侵入型じゃないからそれだと検出できないし。
やろうと思えばキー状態監視でも拾える。
APIフックならある程度検出できるがキーフックの検出は難しそうだなあ
Raw Inputを使えばSetWindowsHookExの影響を受けさせないことは可能?
>>631 48ドットアイコンがロードできないんで最近は「通常サイズ」といっても微妙。
通常では32ドットアイコンを見かけないVistaでもいまだに32ドットだからなぁ。
>>645 相当高速でループ回さないと取りこぼしちゃうよね
>>648 ごくあたりまえのPCのCPUなら、キーボードをスキャンしてるチップが
マトリクスをスキャンするよりずっと速くループできると思う。
650 :
デフォルトの名無しさん:2008/03/25(火) 15:21:43
アプリレベルとOSレベルじゃ・・・
そもそも取りこぼすほどのタイピング速度なんて人間には不可能だろ
アプリだってスレッドのプライオリティを上げればかなりリアルタイムに近い処理できるよ。
マウスカーソルさえ動かないくらいにCPUタイムを奪い撮れる。
キーロガー作ろうとすると、どこでどううまくSleepしてユーザに気付かれないかが難しそうだけど。
CPU使用率なんて見てる奴なら(≒タスクマネージャの類を常駐させてる奴なら)
変なプロセスが起動してる時点でバレるだろ
654 :
デフォルトの名無しさん:2008/03/25(火) 16:35:59
うるさいブタ野郎が
フック後にフックdllの被フックプロセス側で自分自身をLoadLibraryするとフック解除後も居座る事が可能だから
タスクマネージャを眺めていても気付かないかも
656 :
デフォルトの名無しさん:2008/03/25(火) 16:45:51
>>651 そういう安易な考えで作った糞アプリが
キーマクロを取りこぼして迷惑をかけるんだよ。反省しろ。
もうまるっきりスパイウェアの王道行ってますね
むしろ逝ってるか
655が言ってるのはタスクマネージャで気付けるかだから
>>643を持ち出しても意味無い
つ ProcessExplorer
ProcessExplorer はタスクマネージャーじゃないし
SetWindowsHookExをフックすりゃよくね
UserModeでどう頑張って隠蔽してもバレるから無駄
素人さんが気付かないレベルならいいじゃん
って物騒だから。その辺にしとき
入力補助アプリとか使ってたりするとMakeとBrakeがほぼ同時で単純スキャンじゃ確実に取りこぼすと思う。
全部きっちり取らなきゃいけないものでもないしな
取りこぼしはサンプリングが多けりゃカバーできる
LoadLibraryしたDLLの中DllMainとかで
VirtualAlloc→WriteProcessMemoryで実行コード埋め込んじゃえばモジュールも残らないよ
その場合埋め込み先は(DLLから見て)自プロセスの中だから
わざわざ監視されてる可能性の高いWriteProcessMemoryを使う必要ないだろ
> LoadLibraryしたDLL
これ自体CreateRemoteThreadなんかで仕込んでたら普通にセキュリティソフトが警告してくるだろう
ライトプリンセス☆メモリー
クスリでもやってるの?
ダメだよ手出しちゃ…
いません
>>672 そもそもホットプラグ対応じゃないだろ
WM_DEVICECHANGED がきたら、全部スキャンし直す。
676 :
デフォルトの名無しさん:2008/03/26(水) 17:00:43
ファイルにエロ動画、3P、評価Sといったタグをつけるのはどうすればいいの?
ファイル名につけるの以外で。
こっそりヘッダに埋め込む
IPropertySetStorage
エクスプローラのファイルのプロパティの概要。
ファイルが構造化ストレージならファイル内に、
そうでないけどNTFSドライブ上のファイルなら副ストレージに情報を保管する。
副ストレージ???
代替データストリームとか副次ストリームじゃないの?
ああ、すまん。ごっちゃにしちまった。
キーコードを文字列に変換してくれる関数なんてあります?
表だけでもあると助かるんですが
682 :
682:2008/03/26(水) 21:08:48
事故解決
683 :
683:2008/03/26(水) 21:25:02
684 :
デフォルトの名無しさん:2008/03/26(水) 21:50:50
ConvertINetStringの使い方がよくわかりません。
WINAPIの勉強始めましたが、
下記サイトのツリービューの例をコンパイルしましたが、
「未定義のシンボル item(関数 AddItem )」
とエラーが返ってきます・・・。
コモンコントロールの準備「comctl32.libをプロジェクトに加える」とありますが、
もしかしてilink32.cfgに「-L"C:\borland\bcc55\Lib\PSDK"」(←comctl32.libがあった場所)
を追加するのではなかったのでしょうか?
それ以外に間違ってそうな箇所はないきがするのですが。
どうすればコンパイルがとおるか教えてもらえないでしょうか。
環境:BCC
http://www.kumei.ne.jp/c_lang/sdk2/sdk_111.htm
未定義のシンボルならコンパイル以前の問題
>「未定義のシンボル item(関数 AddItem )」
俺には
「AddItemという関数内でitemというシンボルが未定義のまま使われている」
という意味にしか取れないんだが。
少しでもエラーの意味を考えたか?
688 :
672:2008/03/26(水) 22:08:58
>>674 アナログ接続ではWM_DEVICECHANGEは飛んできませんが、
デジタル接続の時だけは飛んできます。
これはホットプラグ対応ということなのでは?
>>675 全部スキャンし直す、ということですが
デバイスマネージャのツリーに表示されるような
接続機器情報を事前と事後に取得して比較する、という理解で合っていますか?
その情報を取得するためのAPIを見つけられませんでしたので
名前など手がかりを教えてもらえませんか?
Sysinternalsのwinobjのようにオブジェクトマネージャの名前空間の
中身(当座は\Deviceディレクトリ)を列挙したいのですが、方法がわかりません。
ネイティブAPIを使うこと、ユーザモードで可能であるということは
winobjのドキュメントからわかるのですが、具体的なアプローチやサンプルなどご存知であれば教えてください
690 :
685:2008/03/26(水) 23:30:34
TV_INSERTSTRUCTというcommctrl.hで定義されている構造体の、
itemってのが未定義って返ってきてるのですが・・・。
commctrl.hにはTV_INSERTSTRUCTとTVITEMのどちらも定義されていそうでした。
定義ってそういう意味じゃないのでしょうか?
>>690 エラーメッセージをコピペしてください
肝心の部分が端折られてて訳分かりません
692 :
デフォルトの名無しさん:2008/03/26(水) 23:37:08
現実問題ファイルのフルパスがMAX_PATH超えることってあるの?
固定長バッファで組むとバグる?
\\.\記法で64Kくらいまで長くできるとか何とか。
(ヌル文字分引いた)259文字って結構長い。
第一エクスプローラもそれを超えるパスをまともに扱えない。
それに俺は大したものを作っているわけではないので、
だからGetOpenFileNameとかだとMAX_PATH固定で作っている。
GetSystemDirectoryみたいに予め必要なバッファの長さを問い合わせられるときには、
問い合わせて必要な分だけ確保するけど。
695 :
685:2008/03/27(木) 00:04:49
>>691 何故か解決しました。
拡張子がcだったのを、cppに変えたらコンパイル出来ました。
C++じゃないとコンパイル出来ないってことだったのでしょうか。
とりあえずの、メッセージすべて
bcc32 -W treevw01.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
treevw01.c:
警告 W8057 treevw01.c 29: パラメータ 'hPrevInst' は一度も使用されない(関数 WinMain )
警告 W8057 treevw01.c 29: パラメータ 'lpsCmdLine' は一度も使用されない(関数 WinMain )
エラー E2451 treevw01.c 132: 未定義のシンボル item(関数 AddItem )
エラー E2451 treevw01.c 134: 未定義のシンボル item(関数 AddItem )
エラー E2451 treevw01.c 137: 未定義のシンボル item(関数 AddItem )
エラー E2451 treevw01.c 140: 未定義のシンボル item(関数 AddItem )
エラー E2451 treevw01.c 144: 未定義のシンボル item(関数 AddItem )
エラー E2451 treevw01.c 146: 未定義のシンボル item(関数 AddItem )
エラー E2451 treevw01.c 149: 未定義のシンボル item(関数 AddItem )
警告 W8019 treevw01.c 150: コードは効果を持たない(関数 AddItem )
エラー E2451 treevw01.c 152: 未定義のシンボル item(関数 AddItem )
警告 W8019 treevw01.c 153: コードは効果を持たない(関数 AddItem )
エラー E2451 treevw01.c 155: 未定義のシンボル item(関数 AddItem )
警告 W8019 treevw01.c 156: コードは効果を持たない(関数 AddItem )
エラー E2451 treevw01.c 158: 未定義のシンボル item(関数 AddItem )
警告 W8019 treevw01.c 159: コードは効果を持たない(関数 AddItem )
警告 W8004 treevw01.c 161: 'hChild2' に代入した値は使われていない(関数 AddItem )
*** 10 errors in Compile ***
構造体のコンストラクタとかもC++じゃないとプリプロセッサで定義されないよ
697 :
685:2008/03/27(木) 00:15:06
>>693,694
なるほど。どっちみち相手のマシンも似たような制限がありそうなもんだけどマシン名含めるとぎりぎり超えそうだな。
とりあえず問題出るまでMAX_PATH固定にしとくか。サンクス。
>>689 よくわかんないけど、dependsにかけたら関数のアタリついたりしないかな
>>692 余裕
NTFSではパスは最長32767文字まで
CだとNONAMELESSUNIONが発動して、
#define DUMMYUNIONNAME u
typedef struct tagTVINSERTSTRUCTA {
略
#if (_WIN32_IE >= 0x0400)
union
{
TVITEMEXA itemex;
TV_ITEMA item;
} DUMMYUNIONNAME;
略
になるとか。
LocalFree()のことだけど、FormatMessage()でバッファ確保させたときってこれで解放するよね。
で、MSDNのLocalFreeの項見ると
>この関数は、16 ビット版 Windows との互換性のために提供されています。
と書いてあるんだけど、深く気にする必要ないの?
というか最近の窓プログラムに普通に利用しても無問題?
>>699 使ってるAPIはごく知られたもので、
ntdll.dllからGetProcAddressしていると思われるAPI(バイナリに文字列として保存されてる関数)も
そのものずばりというのはないようです
それでも臭いのが2・3あるにはあるんですが(たとえばNtQueryObject)
調べても名前空間の調査に関する情報って全然ないので、
臭い関数をどう組み合わせるのか、とかで先に進めないという感じです
>>702 Windowsには、Win16時代からあるAPIがたくさんあるんだよ。
既にそういう仕様にしてしまった以上、いまさら変更はできない。
そもそも、LPTSTR型の引数に、PVOID *型を渡すこと自体が、
おかしいと思わないか?
だから一番いい方法は、FORMAT_MESSAGE_ALLOCATE_BUFFER自体を使わないことだな。
705 :
デフォルトの名無しさん:2008/03/27(木) 09:10:08
文字コード変換にmlang.dllを使用したいのですが、
サンプルコード等ありましたら
教えて頂きたいです。
707 :
デフォルトの名無しさん:2008/03/27(木) 13:36:31
>>705 普通に探せばあるよ
昔使った覚えがある
710 :
デフォルトの名無しさん:2008/03/27(木) 14:50:28
712 :
デフォルトの名無しさん:2008/03/27(木) 15:09:55
713 :
デフォルトの名無しさん:2008/03/27(木) 15:16:41
715 :
デフォルトの名無しさん:2008/03/27(木) 15:22:33
716 :
デフォルトの名無しさん:2008/03/27(木) 15:23:25
717 :
デフォルトの名無しさん:2008/03/27(木) 15:29:08
春休みだからその人は俺じゃないすよ てこと
夏休みならその人は俺になるのか?
逆や裏は真とは限らないだろ?
いや、限るね
春休みにまでプログラミングの勉強しようなんて逆にえらいと思う
別ウインドウの表示内容を自ウインドウに表示させたいのですが、うまくいきません
何か根本的に間違っているのでしょうか?
このソースではデスクトップの(0,0)-(100,100)までを自ウインドウに貼り付けようとしているつもりです
// 自ウインドウを非表示にする
rgn = CreateRectRgn(0, 0, 0, 0);
SetWindowRgn(wnd, rgn, true);
// 別ウインドウの内容をメモリにコピー
HDC hdc_src = GetDC(GetDesktopWindow());
HDC hmdc_src = CreateCompatibleDC(hdc_src);
BitBlt(hmdc_src, 0, 0, 100, 100, hdc_src, 0, 0, SRCCOPY);
// 自ウインドウを元に戻す
SetWindowRgn(wnd, NULL, true);
HDC hdc_dest = GetDC(wnd);
// メモリ→自ウインドウ
BitBlt(hdc_dest, 0, 0, 100, 100, hmdc_src, 0, 0, SRCCOPY);
CreateCompatibleDCで作ったDCは、
ビットマップを選択させないと使い物にならない。
>>727 つくったばかりのCompatibleDCには、たしかモノクロ1x1ビットマップしか選択されてないので
そのままビットマップの転送バッファとして使うことはできない
CreateCompatibleBitmapかなんかで必要なバッファを作ってSelectObjectする必要がある
(当然、選択したものは後で選択解除して、作ったものは後で破棄するべき)
>>727 メモリDCは、CreateCompatibleDCだけでは作れない。
CreateCompatibleBitmap で bitmap も作って SelectObject して
あげないといけない。
それから非表示にした直後にコレやっても、先方のウィンドウ等が
まだ再描画されていない可能性が高いよ。適当にSleepするとか
WM_PAINTをSendしてみるとか、何か対策が必要。
WM_PAINTはSendしちゃだめだろ。
せめてInvaridateRectとかWM_PRINTとかにしようよ。
>>732 SendしたりPostしたりするものではないのは確かなんだけど、
実用的にはこれで不自由しないというか・・・
UpdateWindow が無難かも知れない。
>>733 ユーザがWM_PAINTを投げたことを検出して、
正規の再描画のプロセスが行われるようにしているなんてことをやっていそうだな。
UpdateWindowって結局WM_PAINTをSendしてるだけじゃないの?
>>736 MSDNライブラリには「更新リージョンが空でなければ」という但し書きが付いている。
SDKのドキュメントには、まさにそう書いてあるな。
流石に更新領域がなければ送信しないけど。
739 :
デフォルトの名無しさん:2008/03/28(金) 00:21:48
VistaでIMEについての質問です。
DirectXのサンプルのバグで、VistaでIMEの変換ウィンドウが表示されない問題があったそうですが、
同じ症状で悩んでます。
case WM_IME_SETCONTEXT:
lParam &= ~ISC_SHOWUIALL;
return DefWindowProc(hWnd, msg, wParam, lParam);
WM_IME_SETCONTEXTメッセージが来たときに、ISC_SHOWUIALLフラグを
クリアしてDefWindowProcに渡せばいいと聞いたのですが、
間違いなのでしょうか。
どこかにVistaで独自変換ウィンドウが動くサンプルがあれば教えてください。
740 :
689:2008/03/28(金) 00:25:23
自己解決した
NtQueryDirectoryObject がファイルシステムのディレクトリではなくて
オブジェクトマネージャのディレクトリ用だったみたい
解ればしょぼいけど報告まで
>>704 サンクスコ
型なんて突き詰めれば同じようなポインタや数値なんだから気にしません><
とか言ってるから進歩しないんだけども
使うときは気をつけます
自分よりも下にあるウインドウの色で判断してリージョンを作成することは可能でしょうか?
例えばRGB(0,0,0)以外の部分のリージョンを作成するなど
WM_PAINTは優先順位が低いからな。
イメージとしては、UpdateWindowはキューにあるWM_PAINTをつかんで直接投げるイメージ
InvalidateRectでWM_PAINTを発生させ、直後にUpdateWindowで描画させる、というのはよくやる。
745 :
デフォルトの名無しさん:2008/03/28(金) 12:02:01
ConvertINetStringを使おうとすると、
未解決の外部シンボルが参照されました、と出ます。
Mlang.hをインクルードするだけじゃ駄目なのでしょうか?
優先順位が低いわけじゃなくて、WM_PAINTは通常キューには存在せず、
キューが空で、かつウィンドウに更新領域があるときに GetMessage が
呼び出されると、おもむろに発生する。
自前で Post したり Send したり UpdateWidnow すれば、通常のウィンドウ
メッセージと同じように動作する。同一スレッド内からの Send に至っては
キューにも入らずWindow プロシージャへの呼び出しになる。
>>744 RedrawWindowを使えばいいじゃない
そんな事ぐらいにわざわざ2つもAPIを呼び出すなんて面倒で馬鹿げてる
>>745 mlang.libをプロジェクトに追加しる
750 :
デフォルトの名無しさん:2008/03/28(金) 13:19:17
>>749 mlang.libはVS2005にはありませんでした。
そのくらい自分でつくれよ
753 :
デフォルトの名無しさん:2008/03/28(金) 13:41:00
BCBでの作り方ならありましたが、
VSでの作り方を今探しています。
VSってなんですか?
Visual Sourcesafe
Vidal Sassoon
VisualStudio
ウインドウプロシージャで処理しなかったメッセージをDefWindowProcで処理しないとどんな不具合があるんでしょうか?
760 :
759:2008/03/28(金) 14:10:12
↑
Dialogのプロシージャで処理しなくてもいいので気になったので書きました。
ちなみに試してみましたか?
ダイアログプロシージャとウィンドウプロシージャは違う
ダイアログプロシージャで処理しなかったメッセージはDefDlgProcに送ると面白いよ
送ってはいけません
765 :
デフォルトの名無しさん:2008/03/28(金) 16:14:16
mlang.dllからmlang.libを生成出来ました
#pragma comment(lib,"mlang.lib")
としても解決出来なかったのですが、
そのlibをどこに置いたの?
解決できないというのは、何がどうなってできないとわかったの?
767 :
デフォルトの名無しさん:2008/03/28(金) 17:11:28
testという名前のプロジェクトのtestフォルダに入れました。
エラー内容は
未解決の外部シンボル _ConvertINetStrimg@28が関数mainで参照されました。
error LNK1120 外部参照1が未解決です。
と出ます。
とりあえずSDKをフルインスコしろ
って、よく見たらConvertINetStri`m'gかよww
お前がスペルミスしてるからだろ
770 :
デフォルトの名無しさん:2008/03/28(金) 17:37:41
書き込む時に間違えただけです。
すみません。
多くのサイトでGetProcAddressして使ってるんだから、それに倣えばいいと思うけど。
>>768 ところがMSDNライブラリでConvertINetStringを引くと、
Import library: Noneなんだな。
/* cl /LD mlang.c */ /* mlang.lib 生成 */
#include <windows.h>
#define STDAPI extern __declspec(dllexport) HRESULT
STDAPI IsConvertINetStringAvailable(DWORD dwSrcEncoding, DWORD dwDstEncoding) { return 0; }
STDAPI ConvertINetString(LPDWORD lpdwMode, DWORD dwSrcEncoding, DWORD dwDstEncoding, LPCSTR lpSrcStr, LPINT lpnSrcSize, LPSTR lpDstStr, LPINT lpnDstSize) { return 0; }
STDAPI ConvertINetMultiByteToUnicode(LPDWORD lpdwMode, DWORD dwEncoding, LPCSTR lpSrcStr, LPINT lpnMultiCharCount, LPWSTR lpDstStr, LPINT lpnWideCharCount) { return 0; }
STDAPI ConvertINetUnicodeToMultiByte(LPDWORD lpdwMode, DWORD dwEncoding, LPCWSTR lpSrcStr, LPINT lpnWideCharCount, LPSTR lpDstStr, LPINT lpnMultiCharCount) { return 0; }
#include <windows.h> のに
#undef STDAPI
が必要だった
普通にDEF作ってLIB..EXEでlib作ってリンクできたけどな
>>772 すまん、Web系の方に付いてくるのかと思ったが最初から無いのか
それにしても、プロトタイプ宣言があるのにインポートライブラリが付いてないって謎だな
英語版Windowsとかでdllが入ってない環境があるのかな
777 :
デフォルトの名無しさん:2008/03/28(金) 19:13:04
lib /def:mlang.dll
ひょっとして間違ってますか?
ひょっとしても何もw
Windows95のIEが無い初期版ならmlang.dllが存在しない可能性もありえるかな
それならimm32.dllの方がよっぽど無いとおもうけどなー
MSDNライブラリによれば、問題の関数は、要IE 5.5以上。
ただ、中でIMultiLanguage::ConvertStringを呼んでいると書いてあり、
IMultiLanguageはIE 4以上となっている。
782 :
デフォルトの名無しさん:2008/03/28(金) 19:50:28
IEのバージョンは6でした。
783 :
デフォルトの名無しさん:2008/03/28(金) 20:05:18
EnumWindowsでタスクトレイに入っているウィンドウってどう列挙すればいいんですか?
条件をオーナーかつ非表示にすると余計なウィンドウが混ざりまくりでうまくいきません。
784 :
デフォルトの名無しさん:2008/03/28(金) 20:12:54
うん
そういえばThe Old New Thingの人も書いてたが、
通知領域ってなんでタスクトレイって呼ばれるのだろう?
トレイっぽくへっこんでるからじゃね?
スレ違い<vector>をインクルードしろ
790 :
788:2008/03/28(金) 20:47:46
>>789 あ、ごめんなさい。
WINAPIでプログラム作成中だったのでうっかりしてました。
回答、ありでした。
791 :
デフォルトの名無しさん:2008/03/28(金) 20:57:39
>>785 どうやればLIBファイルを作成出来るのですか?
>>791 まずはGoogleの使い方を覚えよう。話はそれからだ。
793 :
デフォルトの名無しさん:2008/03/28(金) 21:36:50
>>792 まずはDEFファイルを生成すればいいんですかね?
(´・ω・`)
スレ違いなので他所でやってください
796 :
デフォルトの名無しさん:2008/03/28(金) 21:40:42
>>794 どこのスレッドなら大丈夫なのですか?
(´・ω・`)
知ったことか
799 :
デフォルトの名無しさん:2008/03/28(金) 22:39:17
LIB /DEF:mlang.def /out:mlang.lib
したんですが
『ステートメントはターゲット プラットフォームでサポートされていません。』
と出ます。
何でなのですか?
(´・ω・`)
みなさん、穴の準備ができましたよ
* * * * * * * * * **
* * * ** * ** * ** *
* * * * * *. ∧_∧ * ** * * *
* * * * * * (´・ω・`) * * * * * *
* * * * * *. (o o ) * * * * * *
* * * * * *. `u *u' * * ** * **
何この糞スレw
イライラしてきた・・・・
804 :
デフォルトの名無しさん:2008/03/28(金) 23:50:58
805 :
デフォルトの名無しさん:2008/03/29(土) 00:41:00
745 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 12:02:01
750 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 13:19:17
753 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 13:41:00
765 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 16:14:16
767 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 17:11:28
770 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 17:37:41
777 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 19:13:04
782 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 19:50:28
784 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 20:12:54
791 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 20:57:39
793 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 21:36:50
796 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 21:40:42
799 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 22:39:17
804 名前:デフォルトの名無しさん[] 投稿日:2008/03/28(金) 23:50:58
春休み中の糞餓鬼ですよね
あなたにプログラミングは向いていないので諦めたらどうですか?
(´・ω・`)
806 :
デフォルトの名無しさん:2008/03/29(土) 00:41:54
お前がうざい
807 :
デフォルトの名無しさん:2008/03/29(土) 00:45:05
何がですか?
(´・ω・`)
808 :
デフォルトの名無しさん:2008/03/29(土) 00:49:02
>>806 理由くらい言ってくれよ
(´・ω・`)
809 :
デフォルトの名無しさん:2008/03/29(土) 00:50:21
810 :
デフォルトの名無しさん:2008/03/29(土) 00:51:34
解決出来ない
(´・ω・`)
811 :
デフォルトの名無しさん:2008/03/29(土) 00:54:17
早く教えろクズども
(´・ω・`)
ID無しのスレで何をしているwww
813 :
デフォルトの名無しさん:2008/03/29(土) 00:58:40
DLLからDEFファイル出力
↓
DEFファイルからLIBファイル出力
↓
#pragma comment()使う。
mlang.libが2KBしかない…
自分が間違ってるっぽい。
(´・ω・`)
814 :
デフォルトの名無しさん:2008/03/29(土) 01:03:25
>>813 いい加減スレ違いだからVisualStudioのスレにでも行け
(´・ω・`)
815 :
デフォルトの名無しさん:2008/03/29(土) 01:04:37
無駄な100レスでした
さっさと誘導しないからだろ
カスが
やっぱLoadLibraly+GetProcAddressが手っ取り早いんじゃない?
Libraly(笑)
英語が出来ない日本人の典型例だな
まぁそんな事はどうでもいいんじゃね
どうでもいいならレスするな
何言ってんの。ばっかでー
馬鹿はお前だ
はいはいは
>>819 そういうことは一度LibralyをLibraryと書いたものとみなしてその後で「で、Libralyって何?(笑)」とか書いたほうがいいですよ
>>820-824 だからID無しの板で何を(ry
826 :
818:2008/03/29(土) 17:52:15
桜満開
registoryとか?
directry
VOID CALLBACK TimerProc(HWND, UNIT, UINT, DWORD);
型名が必要 というエラーが出ます。
何故でしょうか?
こうしたら?
void CALLBACK TimerProc(void*,unsingned int,unsingned int,unsingned int)
同じエラーが出ました;
本の通りに書いてるのですが・・
じゃCALLBACKの定義がないんじゃないの?
>>833 ×unsingned
○unsigned
VOID CALLBACK TimerProc(HWND hWnd, UNIT uMsg, UNIT idEvent, DWORD dwTime)
{
//処理
}
case WM_CREATE:
SetTimer(hWnd, ATIMER, 100, TimerProc);
こんな感じなのですが、定義されてますよね?
Cを勉強せずにCでWindowAPIを使おうとするあたりがいじらしい
'void (__stdcall *)(void *,unsigned int,unsigned int,unsigned int)' 型は
'void (__stdcall *)(HWND__ *,unsigned int,unsigned int,unsigned long)' 型に変換できない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )
パラメータ 'lpTimerFunc' は void (__stdcall *)(HWND__ *,unsigned int,unsigned int,unsigned long) 型として定義されているので
void (__stdcall *)(void *,unsigned int,unsigned int,unsigned int) は渡せない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )
unsignedに直して、
>>833にしてみると、エラーが上記のものに変わったので、
void CALLBACK TimerProc(HWND__ *,unsigned int, unsigned int, unsigned long)
にするとコンパイルできました
ありがとうございました
>>838 Cは勉強したつもりなのですが、足りないみたいです
すみませんでした
DWORDってunsigned longだったんだ・・・
double word
LibralyとかUNITとかunsingnedとか
スペルミスして遊ぶのが流行ってるのか?
>>839 それってincludeするものが足りてないか、defineがおかしいってことでしょ?
本人がいいなら別にいいけど、正常な環境じゃないような。
じゃあWORDって32bitなん?
>>844 質問したものですが、
>>843を見て
>>832のUNITをUINTにするとコンパイルできました
unsigned int だからUINTなんですね・・・
これからは気をつけます・・
釣りだったと言ってくれw
と言いたいがプログラミング始めた頃なんてそんなもんだわ
でも第3引数はあってる不思議
多分そのうちインテリセンスがGoogleみたいに「もしかしてUINT?」とか出してくれる時代がきっと来るさ
もしかしてLibrary?
開発コード名: yutori
シュミレーションとか?
UINTをキーワード登録して着色しとけばタイプミスなんてすぐに分かるだろ
今のインテリセンスからして
頑張れば未定義のシンボルぐらい検出できる気がするがな
858 :
デフォルトの名無しさん:2008/03/30(日) 07:12:46
それ何てVB?
一方ロシアはlintを使った。
//typo.h
typedef int itn;
typedef int nit;
typedef UINT IUNT;
typedef UINT UNIT;
typedef UINT UITN;
:
//test.c
#include <windows.h>
#include "typo.h"
VOID CALLBACK TimerProc(HWND hWnd, UNIT uMsg, UNIT idEvent, DWORD dwTime);
こうやってタイプミスしそうな別名を大量に定義しておけばいい
凄く頭が悪そうな解決方法でワロタw
typo.h ってのが実にいいな
どのあたりがいいのかわからん。
864 :
デフォルトの名無しさん:2008/03/30(日) 15:02:20
つまんね
ねんどまつ
ねんどろいど見たけどスゲー
typo.h ぐはぁぁぁぁwwwwww
C言語で複数のDLLを呼び出す時のテクニック、みたいなものはありますか?
LoadLibraryを呼びまくる
テクニックって。
どういうのを期待してるのか書けよ。
普通に呼び出すしかねーだろ。
HINSTANCE handles[4];
if (!LoadMultipleLibrary(4, &handles, "advapi32.dll", "comctl32.dll", "shell32.dll", "shlwapi.dll")) {
exit(-1);
}
こういうAPIが欲しいんじゃね?
いらね。
template <UINT N>
struct LoadMultipleLibraryA
{
HMODULE* modules;
LoadMultipleLibraryA(HMODULE* modules)
: modules(modules)
{}
LoadMultipleLibraryA<N-1> operator ()(const char* dllname)
{
if (!(this->modules[N-1] = ::LoadLibraryA(dllname)))
exit(N);
return LoadMultipleLibraryA<N-1>(this->modules);
}
};
template <>
struct LoadMultipleLibraryA<0>
{
LoadMultipleLibraryA(HMODULE*)
{}
};
int main()
{
HMODULE modules[4];
LoadMultipleLibraryA<RTL_NUMBER_OF(modules)>(modules)
("ntdll.dll")("kernel32.dll")("user32.dll")("gdi32.dll");
return 0;
}
練習
(^ิ౪^ิ)kimoiyo
もう遅延読込でいいよ。
>>873 #define _ILFree_Ordinal 155
FARPROC funcs[4];
if (!GetMultipleProcAddress(hShell, 4, funcs, "SHGetFileInfoA", "SHGetSpecialFolderPathA", "SHGetPathFromIDListA", _ILFree_Ordinal)) {
exit(-1);
}
さあ次はGetProcAddressも作るんだ
サンプルのような序数渡しにも対応すべし
...使えば楽勝、とおもったけど、それでは64bitに対応出来ないことに気づく(w
878 :
818:2008/03/30(日) 20:10:08
> &handles
アウト
?
ちょっとMicrosoft Visual C++ 2008 Express EditionでAPI使ってる人に聞きたいんだけどWPARAMにカーソル置いて
右クリック->定義に移動
でWinDef.hに移動した後、WPARAMの定義にあるUINT_PTRで右クリックしたらVC++がハングアップする人いる?
UINT_PTR以外でもなるけど絶対ハングアップするから再インストールしたけど意味なかった。。。
それに普通に使ってても右クリックでハングする事もあるしww
これ、なんていう仕様?
SPが出てないIDEなんてそんな物だろ
>>880 やってみたけどハングしなかった。ほかに条件があるみたいだな。
>>880 2008StdのC++/CLIプロジェクトにて現象は確認できず。
x64のXPとか使ってない? あれとVS2008の組み合わせは入力周りが鬼門らしいぜ。
Boostの型でそういうことが起こったことがあるけど、
複雑にテンプレートを使っているほうが悪いと諦めている。
>>880 "IntelliSenseを更新してます"って表示してる時だったらある
886 :
880:2008/03/30(日) 23:27:29
>>881-885 情報ありがとう
俺もつい最近ハングが頻繁に起こるようになったから何か原因があると思うんだけど…ぐぐっても関連した情報とかないし
ちょっと調べてみたらハング時にタスクマネージャーで実行中のアプリケーションを見たらVC++が2つあってプロセスを確認すると1つはVCExpress.exeで1つはexplorer.exeなんだよな…
とりまexplorer.exeが怪しいからもうちょっと状態調べてみます
レスくださった人達ありがとうww
名前付きパイプの転送速度が遅く、
1000BASE-Tで接続したLAN上の別のPCに10MB送るのに5秒くらいかかっています。
これを1秒くらいに短縮したいのですが、名前付きパイプを使うのをやめる前に、
名前付きパイプの速度を調べたことのあるかたにお伺いします。
10MBを5秒というのは普通ですか? それとも遅いほうですか?
>>887 1000BASE-Tの規格に対してはすこぶる遅いが、
データをハードディスクから読み出す時間がかかってるんじゃないか?
ハードディスクから読み込まないでデタラメなデータを送信してみ?
890 :
887:2008/03/31(月) 00:37:21
>>888 メモリ→メモリです。
同一PC上でも
\\hostname\pipe\pipename
だと4秒くらいかかります。
\\.\pipe\pipename
だと一瞬です。
hostnameの解決に時間掛かってるとか?Wiresharkあたりでネットワークパケットをキャプってみれば?
892 :
887:2008/03/31(月) 02:36:18
結果から先に。
0.3秒に短縮できました。
ありがとうございました。
Windows Server付属のネットワークモニタで確認したところ、
Read要求への返答は即座に返ってきているが、次のRead要求を出すまでに妙な間がありました。
また、一回にRead要求するサイズが4292バイトと中途半端でした。
ふと思いついて、↓のコードのようにReadFileの第三引数の値を小さく制限してみたら、速くなりました。
*lpNumberOfBytesRead = 0 ;
DWORD dwRemainSize = nNumberOfBytesToRead ;
BYTE* p = (BYTE*)lpBuffer ;
while(dwRemainSize != 0) {
DWORD dwThisTimeReadDoneSize ;
// if (ReadFile(hFile, p, dwRemainSize, &dwThisTimeReadDoneSize, NULL)) { // 変更前
if (ReadFile(hFile, p, __min(dwRemainSize, 4096), &dwThisTimeReadDoneSize, NULL)) { // 変更後
dwRemainSize -= dwThisTimeReadDoneSize ;
p += dwThisTimeReadDoneSize ;
*lpNumberOfBytesRead += dwThisTimeReadDoneSize ;
} else {
return FALSE ;
}
}
自分のウインドウを表示させたまま下にあるウインドウの画像はどうやったら取得できますか?
PrintWindow
>>894 それだと特定のウインドウしか取得できませんよね?
なんとキレイな条件のあとだし
EnumWindowsで列挙→GetWindowPlacementして自分で合成
シラネ
>>893 一瞬だけ自分のウィンドウを非表示にする、ってわけにはいかんの?
DWMサムネイルAPI
↓
Vista以降のDWM有効になっている環境でしか使えない
EnumWindows→PrintScreen
じゃできないのかな
APIで組むのめんどくさい
MFCでもめんどくさいけど
MFCはプログラムが長くなるとデバッグしんどい。全体像がつかみにくい。
コード量が少ない分、生産性は上がるかもしれないが、融通が利かないプログラムになる。
俺ははAPIの方が好きだ。プログラム量は多くなるけど。
そこでWTLですよ
>>902 EnumWindows+コールバックで目的のウィンドウ探して
コンパチブルDCとビットマップ作って
PrintWindowで描画する
これをC言語で書くだけ
>>868はwinstlあたりを見てみるといいんでないかと
>>900 >>893じゃないけど、ちょっと興味を持ったので試してみたが、これ面白いな。
DirectXで描画されているゲームのウインドウを別のウインドウで隠してみても、問題なく表示できるし、
しかも、ゲームもサムネイルも、一切フレーム落ちしない。
いい時代になったもんだ。
でも、トップレベルウインドウじゃないとダメって制限はちょっと気に食わないな。
予想だけど、サムネイルの実装が、DWMの各ウインドウごとのサーフェイスに直接描画しているからなんだろうか。
2k/XPでもレイヤードウィンドウにするとDWMとほぼ同じ状態になるけど意外と知られていないのかな?
他人のウィンドウをレイヤードにするわけにいかんだろ。
なんで?
勝手にレイヤードウィンドウにすると動かないソフトなんてAeroGlassでもまともに動かないと思うが
テキストを選択状態にしたときの青いフォーカスの色をAPIからゲットする方法が分かりません。どなたか教えていただけないでしょうか?
GetSysColor
Vistaで出るのはタスクバーのサムネイル用なのか
で?
DWMのサムネイルAPIは、アプリ側で処理を実装して中身を差し替えることもできる
(プレーヤソフト等で描画内容だけ返すようにするとか)
から、ウィンドウ全体のキャプチャとして必ず使えるわけでもないんで注意
>913
どうもありがとうございました。
918 :
デフォルトの名無しさん:2008/03/31(月) 15:57:10
hBitmap=(HBITMAP)LoadImage(hInstance,
"C:\\Program Files\\DevStudio\\MyProjects\\test\\test.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
これだとOK ファイルから画像が読み込める。
だけど、
hBitmap=(HBITMAP)LoadImage(hInstance,
"IDB_BITMAP1",IMAGE_BITMAP,0,0,
LR_CREATEDIBSECTION);
これだとリソースから画像が読み込めない。
#include "resource.h" も入れてあるし
IDB_BITMAP1 というリソースも
入ってる。
LR_CREATEDIBSECTIONを 0 にしたり
"IDB_BITMAP1" の前に TEXTとか書いたりもしたが駄目。
何でだろう? (VC++ 5.0)
> VC++ 5.0
こんな古いコンパイラ使ってる奴がそんな初歩的な事も知らないなんて
どういう訳なのか小一時間問い詰めたい
MAKEINTRESOURCE
921 :
918:2008/03/31(月) 16:16:27
hBitmap=(HBITMAP)LoadImage(hInstance,
MAKEINTRESOURCE(IDB_BITMAP1),
IMAGE_BITMAP,0,0,0);
って事でいいのかな?
ちなみに、エラーや警告は0です。
くだらん質問ですまん。
922 :
918:2008/03/31(月) 16:17:58
921でやってみたが
やっぱり if(hBitmap==NULL)
で調べるとロード出来てないみたいだ
>#include "resource.h" も入れてあるし
> IDB_BITMAP1 というリソースも
>入ってる。
"IDB_BITMAP1" というリソースが入ってないのが原因です。
"IDB_BITMAP1"で作るか、IDB_BITMAP1のままなら
>>920 ほんとに初歩的な質問
VC++5でWin32入門(笑)
10年前からタイムスリップしてきたのか?w
NULLが返ってきてたらGetLastErrorで見てみては
Cで
モジュール化の際、何か注意すべき事はありますか?
>>921はコンパイル完了直後か。
で実行してから
>>922のレス、と。
その間2分足らず。もう少し考えてみろと言いたい。
>>926 ネタにしてはくだらん
マジならスレ違い
VC++5.0でWindowsプログラミング入門
とかいう類いのタイトルの糞本を手にして、
がんばってVC++5.0をピーコしてきたんじゃね?
タイトルやサブタイトルに
特定のVCのバージョンを書いてるような
そういう本は十中八九、糞本だ。
コンソールアプリはどうしてウインドウを共有(というかコマンドプロンプト上で動作)することが出来るんですか?
そこにアプリはいません。共有してなんかいません。
>>930 PEヘッダにコンソールって書いてあって、
与えられたコンソールを握ってるから。
>>931 コンソールアプリの中でコンソールアプリを呼び出しても新しいウインドウは現れないじゃないですか、あれが不思議で・・・。
>>932 PEヘッダですか、調べてみます。
ありがとうございました。
「新しいウインドウ」とかそういう概念が存在する以前からの仕組みだから・・
>>933 コンソールのウィンドウ=昔のパソコンのディスプレイ
他のプログラム起動するたびにディスプレイそのものがいくつも出ては来ないだろ
そういう挙動(って言うほどのもんじゃないが)をシミュレーションしてんだろ
スタートアップルーチンのソースを読んでみ。
mainあるいはWinMainはエントリポイントではなく、
エントリポイントにはスタートアップルーチンがあり、
OSではなくアプリケーション側で、
様々な初期化を行った後に、
mainあるいはWinMainを呼び出している。
そのスタートアップルーチンで、
コンソールまわりの処理を少しやってる。
そのコードや、そこで使われているWin32APIを見れば、
少しは見えてくるかもしれん。
>>933 コンソールプログラム自体にはウィンドウを開く処理は全く入ってない。
PEの中に区別があるということは、
CreateProcessあたりがそれを見て制御しているくらいのことは
容易に想像できるだろ?
>936
スタートアップルーチンではすでに遅いと思うがどうか。
リンカで指定する/subsystemで決まる
>>938 ていうかCreateProcessの使い方に、コンソールの継承の話があったような気がする。
>>939 すでに遅いけど、コンソールに関するAPIを呼んでる。
PEにWin32GUIと書いてあれば、
コンソールを持つプロセスから起動しても、既存のコンソールからは切り離される。(別のコンソールを開くことは可能)
PEにWin32CUIと書いてあれば、
コンソールを持つプロセスから起動すると、既存のコンソールに結びつけられる。(別のコンソールを開くことは可能)
コンソールを持たないプロセスから起動すると、新しいコンソールに結びつけられる。
コマンドライン引数によって、GUIとCUIが切り替わるような代物を作る場合、
PEはWin32CUIにしておき、コマンドライン引数を見てから、GUIならコンソールを切り離す。
CUIならコンソールを使い続ける。
コンソールを持たないプロセスから起動したときに、短時間だがコンソールが作られて画面に出るのが、かっこわるいが。
MessageBox(hWnd,TEXT("ダイアログボックス1")
,TEXT("ABOUT"),MB_OK);
でダイアログ出したら親フォームの後ろに隠れて
操作できなくなったりするのはなぜでしょう?
ALTキー押すと前面に出てくるんですけど
自分で作ったDialogをDialogBoxマクロで表示させれば
ちゃんとModalで前に出るんですけど……
VS2008@Vista64です
第一引数のhWndが正しいことを確認してみて。
NULLとか渡していると孤児になるから、
Zオーダーが後ろになってしまってもおかしくない。
>941
はあ。そーゆーのはmsdev.com方式でやるもんだとばっかり思ってたけど。
msdev.comはSubsystem:consoleにしておき、msdev.exeはsubsystem:windowsにする。
cmd.exeからパス経由で"msdev"で起動なら、comがexeより優先されるので問題ない。
関連づけとか、ショートカットとか、そのあたりにはフルでmsdev.exeを登録しとけば
コンソールが一瞬出てくるとか云う話もない。
>>941 > すでに遅いけど、コンソールに関するAPIを呼んでる。
スタートアップルーチンでの初期化処理はstderrとかの実体にデータをセットしてるだけで
コンソール云々は関係ないと思われ
Cランタイムライブラリを一切リンクしないなら↓がコンソールアプリの最小コードになる
#include <windows.h>
#pragma comment(linker, "/subsystem:console /entry:EntryPoint")
int __cdecl EntryPoint()
{
DWORD d;
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), "TEST\n", 5, &d, NULL);
return 0;
}
>>943 hWndはウォッチで確認してみてもNULLじゃないんですね
ウインドウプロシージャの中で表示してるんですけど
プロシージャ内でも
DestroyWindow(hWnd);とかは普通に動いてます
>>944 msdev.comってそういう用途のためにあったのか
長い間VC6使ってるけど知らなかった
PEヘッダのIMAGE_OPTIONAL_HEADER32構造体のSubsystem変数を見てCUIだったら
Windowsの中の人がプログラムがディスプレイだと思ってるどこかへの標準入出力をcmd.exeにリダイレクト?するわけですか・・・
DOS用スタブプログラムというので未だにDOSとの互換性残してるんですね
20年前のRPGが今でも動く変態OSだからな
シムシティのために検出コードを仕込む変態OSでもある
951 :
デフォルトの名無しさん:2008/04/01(火) 03:19:04
質問です。
BGMを流しつつ効果音を鳴らしたいのですが、
リソース内のwavを重ねて再生するには、
一度ファイルに吐いてmciSendStringするしかないですか?
sndPlaySoundでは重ねられないし、
mciSendStringはリソースが直に使えないし…。
DirectSoundを使えばよいようですが、
DirectXに頼らない方向で行きたいので。
>>951 素直にDirectSoundを使おうぜ。
DirectSoundをサポートしていないような環境では、
複数の音を同時に鳴らすこと自体ができないかも。
結局、多くの環境で安定して動作するためには、
自前でwaveをmixして1つの音として出すしかなく、
そうなれば、waveOutWriteとかの出番でしょう。
>>952,953
レスどうもです。。
やっぱりDirectSound使えってことなんですね。
わざわざ音を加算してやる…のも楽しそうだけど。
DirectXを使うと、作ったものを配布するときに
「DirectXn.nが必要です」ってなるのが嫌なので避けてたんですが、
どうやらある程度は標準で乗ってるんですね。なんという無知。
DirectSoundくらいならいまどきのwindowsであれば、
特に落とす必要もなく動くってことですよね。
素直に使います。
955 :
デフォルトの名無しさん:2008/04/01(火) 04:11:41
前にもココで教えてもらったんですが、忘れてしまってもう一度質問させてください
インターネットのページをダウンロードしてファイルに保存する便利な関数があったと思うんですが、関数名を教えてください
InternetDownLoadFiles
URLDownloadToFileな
958 :
デフォルトの名無しさん:2008/04/01(火) 04:58:00
>>957 おお
ありがとうございました。
何度見ても覚えられない関数の一つ
>>956 このスレで時々そうやって茶化してるのは、お前か。
なんだCOMか
EDITコントロールで選択されている文字の選択状態が解除になった時のメッセージってないのでしょうか?
EN_SENTAKU_KAIJO
リッチエディットには、EN_SELCHANGEってあったけど
EDITコントロールでは使えないとおもふ
>>963 回答ありがとうございます
できないことがわかっただけでも収穫です
>>951 その昔WAVEMIX.DLLとかいうのが存在したのを思い出した
Plus!95のピンボールが使ってたっけ
CreateCompatibleDCで作成したデバイスコンテキストにSelectObjectでビットマップを割り当てた場合、
old = (HBITMAP)SelectObject(...)でオリジナルを退避させて、開放前に元に戻す必要ありますか?
あります
またはSaveDC/RestoreDC
ありがとうございます
削除することが分かっているDCなら元に戻す必要ないんじゃね?
選択された状態のビットマップは削除失敗するかもしれないので順番に気をつける必要がある
Windows NT 3.xあたりの頃のSelectObjectの日本語版の説明には描画完了後に必ず元に戻せという指示があった
CreateCompatibleDC時に最初に入っていた1x1ビットマップって
選択外してDCだけ削除するとリソースリークしない?
元に戻せと書いてあるなら素直に従ってればいいだろ
余計な事をしてもバグの元凶になるだけだろうが
Created: March 20, 1992
こんな古い記事が残っているのがビックリ
確かにストックオブジェクトの一種みたいだな
2000で適当に試してみたら GetStockObject(21) で返ってくるハンドルと同じだった
もう一つの隠しストックオブジェクトGetStockObject(20)は標準のカラースペースのようだな
LOGCOLORSPACEにGetObjectしてみたら標準のカラースペースではなくsRGBだった
なんでMSDNってこんなに糞なの
探し辛ええええええ
>>979 site:msdn2.microsoft.com付けてググるといいよ。
Window のサイズ(OSが表示する画面のフレームを含めた)を取得する方法が分からないのですが、教えていただけないでしょうか?Vista や XP のデザインの違いによる全体のサイズを知りたいのです。
GetSystemMetrics とかそんな名前だったような。
AdjustWindowRectやAdjustWindowRectEx
とりあえずGetWindowRectかGetWindowRgn?
AdjustWindowRect(Ex)ってメニューが二段以上になる場合を考慮できないのがなぁ
つうかWin標準のメニューもIEのメニューもどきみたいに右端に >> が出ればいいのに
クライアントレクトとウィンドウレクトで出せるんじゃないか?
基本的に与えられたクライアント領域の外のことについては触れてはいけない。
>>985 あれはシェブロンっていうコントロールだよ。
機能的に単純にメニューバーと置き換えることが出来ないので、
標準にできないんだと思う。
>>988 それは知ってるよ。っていうかシェブロンはRebarの機能の一つ
メニューが二段以上になるのが気に食わないからWTLのコマンドバーをRebarに乗せて使ってるけどこれもバグ多いしなぁ