1 :
デフォルトの名無しさん :
2010/08/22(日) 00:16:50
2 :
1 :2010/08/22(日) 00:17:40
前スレ最初のやり取りを見て、過去スレのリンクは貼りませんでした。
くるしゅうない
4 :
デフォルトの名無しさん :2010/08/22(日) 03:08:07
聞いてくれ。 普通はスクロールバーのMAX値を PAGE値より大きくすると、スクロールバーが表示され、 PAGE値より小さくすると、スクロールバーは非表示になるよな? ところがMAX値を変更してこれを連続的に切り替えると、表示されるべきときにも1回おきに表示されないんだよ。 ちょっとみんなも試してみてくれ。 これって俺が悪いのかスクロールバーのバグなのか?
static 禁止な
新スレ乙 前スレ読んだけど面白かったw
static int otsu = 1;
staticの意味を分かっていて疑問に思うなら向いてない
落ちてないぞ
>>11 午前中ずーっと落ちてんだが、やっと復旧したようだな、屈強なMicrosoft 鯖でも落ちることがあるんだ
aspxだからなあ
>>8 Win32 APIとか以前のレベルの、
まさにstaticの意味を分かっていると自称してるような人間を晒しあげてる本だよ
>>16 言語によってstaticの意味はかなり違う件
例えば極めて大雑把に言って
C:「綿密な調査無しで修正すると大きな影響を及ぼす可能性がある」
Java:「単にclass-uniqであり特定のinstanceに依存しない」
VC++とかだと文法が微妙に普通のCと違うところがあるから
Windowsで当てはまるかどうかは知らないが
は?
死ぬほどどうでもいい
>>17 が何も分かっていない素人だということは良く分かった
あんまり言うと、staticについて説明してみろって言われるぞ
マニュアル読めよw Cでは2つの意味しかないだろ
Cに慣れてないことがわかるなw
static が書かれているとソースが綺麗(キリ
25 :
4 :2010/08/22(日) 22:05:08
↓例えば普通のウィンドウのWM_LBUTTONUPのハンドラあたりでこんな感じでやってみて。お願い! static bool bLarge = true; bLarge = !bLarge; SCROLLINFO si = { sizeof(SCROLLINFO) }; si.fMask = SIF_RANGE | SIF_PAGE; // SIF_DISABLENOSCROLLなし si.nMax = bLarge ? 100 : 10; si.nPage = 20; SetScrollInfo(hWnd, SB_VERT, &si); 左クリックしてsi.nMaxが100のときでもスクロールバーが表示されない。なぜ?
si.nMax == bLarge ? 100 : 10;
やってみてじゃねえよ ソース見直せ
28 :
4 :2010/08/22(日) 22:36:55
大変申し訳ない。原因が分かりました。 WM_SIZEのハンドラで、ページサイズを設定してたんですが どうやらスクロールバーってのは「ページサイズだけ」を単独で設定するんじゃなく、 範囲といっしょに(SIF_RANGE | SIF_PAGE)設定してやらないといけない仕様のようですね。 これをSIF_PAGEだけ設定したのが原因のようです。 大して調べもせずに安易に頼ってしまって申し訳ない。 しかし、みんな知ってた?MSDNにも書いてないしなぁ・・・
static変数の意味がわかってないw
staticについて勉強しなおして来い
case WM_LBUTTON_PRESSED: static bool x=false; ::MessageBox(NULL,"注意",x?"あほ":"まぬけ",MB_OK); x=!x; break; マウス左ボタンを押す度に あほ、まぬけ と交互にメッセージが出る?
caseの中で変数宣言できたっけ
33 :
4 :2010/08/22(日) 22:47:16
分かりにくくてごめんなさい!case文じゃなくてメッセージハンドラとして関数化してます。
34 :
4 :2010/08/22(日) 22:54:18
あと、最小値・最大値を設定するとページサイズは初期値に戻っちゃうみたいです。 つまり範囲をセットする時にもページサイズもいっしょにセットしてやらないといけないみたいです。 こういうことって書籍とかにあまり書いて無いよね?俺が探すの下手なだけ・・・?
こういういちいちうるさい奴がいるから、動物を電子レンジで乾かすなと注意書きが必要なんだろうな。
36 :
4 :2010/08/22(日) 23:15:09
>>35 ってことは俺の言ってること当たってるってわけね?サンキュー
lstrcpyとstrcpy_sはどっちがおすすめ?
間を取ってstrncpy
ダイアログのスクロールバーをいじっています。 サイズを変更した際に、スクロールバーのレンジを変更した後、 その結果によって、スクロールバーが出たり消えたりしますが (SCROLLINFOのnMin,nMax,nPageの関係で。)、 この「出た」「消えた」を得られる方法はありませんか? この「出た」「消えた」で、「縦スクロールが消えれば横サイズが増える」と言った具合に ダイアログのクライアントサイズが変わってしまいますが、 それによるWM_SIZEがこないので、 「出た」「消えた」が発生した後、もう一度サイズを変えないと、 ダイアログ内のコントロールの並び替えがうまくできません。 稚拙な質問ですが、ご教授願います。
入門書でstaticに関する記述を読むといいよ
staticネタはもういい
44 :
デフォルトの名無しさん :2010/08/23(月) 19:39:48
getpixelを使わず画像内の1ピクセルの色情報を出すことって可能? どっかのメモリに配列になっていないのか
出せるしなってる DIB
可能
47 :
41 :2010/08/24(火) 05:12:40
static関係な…(ry すみません、自己解決しました。 WM_SIZEで縦スクロールのレンジ変更した後、ウィンドウの幅が変わったら もう一度WM_SIZEしようとしていたのですが、 PostMessageじゃなくて、SendMessageしていたため、 SendMessageが返ってきた後、もう一度古いサイズでコントロールの並び替えしていたのが原因でした。 static以前でお恥ずかしいでス…
48 :
デフォルトの名無しさん :2010/08/24(火) 15:13:52
wchar_tとcharってunionで定義できないんですか? struct S union U{ wchar_t X[4]; //1 char X[4]; //2 }; みたいな感じでなぜ無理なんでしょうか?2で1が再定義されますとエラーがでる ちなみにTCHAR使えよって思うかもしれませんが、 ちょっと説明長くなるので省略しますが、使えない状況にあります。 さらに、どちらかで統一して書けばいいだろと思われるかもしれませんが、 これもいろいろあって、統一は絶対にできない状態です つまり、
49 :
デフォルトの名無しさん :2010/08/24(火) 15:15:58
wchar_tとcharってunionで定義できないんですか? struct S{ union U{ wchar_t X[4]; //1 ←ココ char X[4]; //2 ←ココ }; union U{ wchar_t y[4]; int i; }; } みたいな感じでなぜ無理なんでしょうか?2で1が再定義されますとエラーがでるのです ちなみにTCHAR使えよって思うかもしれませんが、 ちょっと説明長くなるので省略しますが、使えない状況にあります。 さらに、どちらかで統一して書けばいいだろと思われるかもしれませんが、 これもいろいろあって、統一は絶対にできない状態です つまり、状況に合わせて自動的にwchar_tとcharが切り替わえれないと困るのです 教えていただけますかい?
50 :
デフォルトの名無しさん :2010/08/24(火) 15:17:28
ごめん勘違いしてた wchar_t X[4]; //1 ←ココ char X[4]; //2 ←ココ ってwwwww すまそ wchar_t X[4]; //1 ←ココ char Z[4]; //2 ←ココ にしなきゃ無理に決まってるw
スレ間違えてますよ
とりあえず落ち着こうか
TCHAR使えよ
久しぶりに吹田
和んだ
すいません。以前他のアプリにキー入力イベントを送る方法を質問した者ですが、 対象アプリが対策をしたようで、対象アプリがアクティブになるとkeybd_eventも受け付けなくなってしまったようです。 対象アプリがノンアクティブのときはmouse_eventでマウスカーソルの移動ができるのですがアクティブにするとダメなようです。 どうしたらいいでしょうか。
いたちごっこをしたいのか
くそー。糞ゲーのくせにこういうところは全力なんだなー。
ドライバを書く
対策される度ここに聞きに来る気かよ… BANされた方がいいかもね
糞ゲーならやらなきゃいいのに。 馬鹿の考えることは微塵も理解できない。
実はスカトロゲーの意
このスレの範囲では無理だからさっさと出て行って 仮想入力デバイスドライバでも作れ
どっかの国で岩盤崩落で結構な人数が閉じ込められてて 無事生きてるんだけど救出に4ヶ月掛かるって言ってた 穴から食料送るのは良いとして糞はどうやって処理すんだ
穴から出せばいいじゃん まあ、実際問題は糞より尿なんだけどな 糞はなんとか隅っこに積んで置けるけど尿からは逃げようがない
糞を堤防状に円形に積んで その中に尿を足せば桶
タスクバーの監視を行いたいのですが、どういった関数を使えばよいのでしょうか。 知りたいのは、 ・新たにウインドウが作成され、タスクバーに表示された ・ウインドウが閉じられ、タスクバーから消えた ・ウインドウの名前が変更され、タスクバーにも反映された の3つです。 お願いします。
んがんぐ
treectrlってlistctrlみたいに仮想で出来ないよね? 1万件前後を子ノードに追加したら糞重くてどうにかしたい 一応LPSTR_TEXTCALLBACKにしてTVM_INSERTITEMしてみてるけど
CreateSolidBrushを使用すると、外枠が黒で囲まれた四角が描けますが この外枠と内側を同じ色にした四角を描くAPIがあれば教えてください
CreateSolidBrushはブラシを作るだけで四角は描けません。
FillRect
外枠はBrushではなくPenの担当ではなくて?
76 :
67 :2010/08/26(木) 17:07:00
>>71 回答有難うございます。
どう言ったメッセージをフックすれば宜しいのでしょうか。
FillRect使うんだったらPenは関係ないね。 ごめんね
78 :
デフォルトの名無しさん :2010/08/26(木) 18:32:11
Proxyに関するAPIの宣言について、参考になるHPでも置いていってくれないか? 真面目にググッた訳じゃないけど、エンドユーザー側の使い方しか出てこなくて、APIの宣言が分からなくて。
いきなりどうしたの? 質問の続きならレス番書いてくれないか
むしろお前が
10分間スリープモードにさせるとか出来るAPIない?
84 :
デフォルトの名無しさん :2010/08/26(木) 19:24:12
>>83 WaitableTimerを使うと、指定した時間に起こすことができる。
>>83 たしか画面の外にマウスカーソルを持っていくとスリープするツールがあったような
>>76 OSによる
タスクバーの部分がタブだったりツールバーだったりする
ググりゃ出てくる
explorer.exeにDLLを注入できればあとはいじり放題
>>91 あるだろ。
しかもすでに正解が書いてあるのに、どれだけ馬鹿なんだよ。
Thread.Sleepと電源のスリープ勘違いしてるとか救えなさすぎるだろ
>>> from ctypes import * >>> dueTime = c_longlong(100000000L) >>> windll.kernel32.SetWaitableTimer(windll.kernel32.CreateWaitableTimerW(0,True,0),pointer(dueTime),0,0,0,True) 1
97 :
デフォルトの名無しさん :2010/08/27(金) 05:45:13
>>94 タイマーを設定してから、休止モードなりスリープなりさせると、
その時間で復帰するんだよ。
無知なんだから黙っていればいいのに。
スリープモードの話題に便乗 スリープモードに入ると、何かアプリにメッセージ来るの? WM_ENDSSESION見たい感じで。WinVistaとか無いから調べられん
Vista以降でもXPと同様、スリープに入る直前にWM_POWERBROADCASTが来る。 メッセージへの応答でスリープを拒否れないとか、 メッセージを送らずにスリープに入るのは不可能になったとかの違いはあるけど。
飼い猫か嫁にPCの電源いれといてくれと頼んでおくほうが楽だな
Windowsのサービスプログラムで、 現在ログインしているユーザがいるかの判定を行いたいのですが どのようにすればいいでしょうか?
GetUserName
>>95 悪い、XPだとできた
NT4で試したときにうまくいかなかくてな・・・
NT4ってACPI対応してたっけ…?
ファイル等をドラッグ中に、マウスカーソルがIDC_NO(禁止カーソル)になった事を取得するにはどの関数を使えばよいのでしょうか。 GetCursorInfo()して取得したhCursorをLoadCursor(NULL,IDC_NO)と比較しても、反応してくれません。
NT4だと独自実装のしかないんじゃなかったかな。 スリープとかは基本的にOSにとって想定外の事柄だったはず。
あるスレッドがSleepしているかどうかを厳密にチェックする方法はありますか? 直前にフラグをセットしても、実際にSleepが呼び出されるまでは起きている状態なので この状態でスレッドを起こす処理が入ってしまい色々と問題が起きてしまってます。 Sleepからの解除はコールバック設定出来るのですが…
どちらかというと他のスレッドがスリープしているかを知らないで済むような仕組みを作った方が簡単 寝てる側はイベント待機させていおいて 起こす側はSetEventするだけで済むようにしたり 共有フラグ使うならクリティカルセクション使うとか
>>110 原理的に不可能
チェック関数から戻った直後にスレッド切り替えが発生して
そのスレッドが起きたらどうなるの?
原理的に不可能なはずのIsBadReadPtrとかは存在してて
deprecateされてるのはご愛嬌
>>108 OLEドラッグアンドドロップならIDropTarget::DragOverから戻ってきたときにpdwEffectを見る
OLEドラッグアンドドロップでない場合とか自分がdrop sourceではなく
カーソルの状態を横から調べたいという場合は公開された方法はなさげ
>>106 お前は10年以上前の知識で無い無い連呼してたのか・・・
公害級の老害だな
スリープ中に電源ボタンを押さずにソフト的に起こす方法ってない?
Wake on LANとか?
--------- Hoge(&H)| --------- Foo(&F) | --------- という二つの項目をもったメニューを動的に ------------------ Hoge(&H) →|Bar(&B)| ------------------ Foo(&F) | --------- と作り替えるにはどうすればいいのでしょうか? CMenu menu; menu.LoadMenu(MAKEINTRESOURCE(IDR_POPUPMENU)); menu.GetSubMenu(0).InsertMenu(0, MF_STRING | MF_ENABLED | MF_BYPOSITION, 111, L"Bar(&B)"); とすると --------- Bar(&B) | --------- Hoge(&H)| --------- Foo(&F) | --------- となってしまいましたorz
つ CMenu::ModifyMenu()
MFCはスレ違い
MF_POPUPを付けたり外したりすればちゃんとそれに連動して変わるべ
なんだ、"Hoge(&H)"を"Bar(&B)"に変えたいんじゃないのか。 Hogeをサブメニューにして下位にBarを入れたいんか。 "→"はそういうつもりだったか! 大いなる勘違い、すまんww
人に説明するって難しいよNE!
GetMenuでメニューのハンドル取って そのハンドルからGetSubMenuでインデックス指定してサブメニューのハンドル取って そのハンドルからサブメニューのHoge(&H)をSetMenuItemInfoでサブメニューに変更、そのときにCreateMenuでメニューを突っ込んでおく で、そのメニューにInsertMenuItemでBar(&B)の項目を追加すると出来たけど、メンドイ
C#でWIN32APIを使って名前付きパイプのクライアント側をつくっています。 C++のサーバー側では hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Server"), PIPE_ACCESS_INBOUND, // クライアントからサーバーへ PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | // メッセージとしてやりとり PIPE_WAIT, // 受信するまで制御を返さない 1, // パイプに対する最大インスタンス CONFIG_PIPE_SERVER_MAXOUTBUFFER, // 出力バッファ CONFIG_PIPE_SERVER_MAXINBUFFER, // 入力バッファ 0, // タイムアウト NULL); で作り、クライアントは hFile = CreateFile(PIPE_NAME, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); でやっていますが、当初クライアント側で一つの関数内で実験的に CreateFile→パイプへの書き込み処理→CloseHandle という流れで作っていたのですが、最初の一回は通信成功するものの、二回目以降動きませんでした。 試行錯誤した結果、最初の一回目のCreateFileは成功してますが、二回目以降のCreateFileに失敗しています。 サーバー側の問題では無い事を確認するために、その関数内で CreateFile→CloseHandle→CreateFile→CloseHandle という流れにしてみると、やはり余計なコードも処理も入ってないにもかかわらず 二回目のCreateFileに失敗します。ちゃんとCloseHandleしているのになぜ失敗するのでしょうか?
127 :
126 :2010/08/31(火) 12:49:42
クライアント側を元通りに CreateFile→パイプへの書き込み処理→CloseHandle に直してから、次の操作をしてみました。 @サーバー立ち上げ Aクライアント立ち上げ Bクライアントでパイプ通信→成功 Cクライアント終了 Dクライアント再立ち上げでパイプ通信→CreateFile失敗 サーバーを立ち上げ直さないと、二回目のCreateFileに失敗します。
GetLastErrorで詳細を調べる
129 :
126 :2010/08/31(火) 13:28:37
>>128 アドバイスありがとう御座います。
ERROR_PIPE_BUSY 231 0x000000E7 すべてのパイプ インスタンスがビジーです。
このエラーがでました。
パイプのハンドルの開放や再接続に思った以上に時間がかかるのか、
なにか手順が欠けているのか不明で引き続き調べています。
130 :
126 :2010/08/31(火) 14:32:12
何らかの手順ミスにより、クライアントのCloseHandleで接続が切れてないのかと思い、 サーバー側でのパイプ作成時のインスタンス数を3くらいに増やしても結果は同じでした。 (つながったままのが最大2個残っても再度CreateFile出来るかと思った) 時間が思った以上にかかるのかと思い、一回目の通信と二回目の通信に一分くらい開けても 結果は同じでした。さすがにこれ以上長いのはあり得ない様な気がします。 自分が参考にしたサイトでは使われてなかったサーバー側のdisconnectNamedPipeを一回通信のたびに 実行しても戻り値を見ると失敗しており、結果も変わりませんでした。 そもそもクライアント側のCloseHandleは戻り値を見ると成功しています。 関数内でClosehandleとCreateFileを挟まずに連続でWritefileとシグナルイベント発生のみをすると 正常に複数回通信できます。 ただ、プログラム開始時のみCreateFileして終了時にclosehandleするようにすれば部分的には解決しますが、 本質的に理解出来ないままになる上に、クライアントの再起動後に接続出来なくなってしまいます。 原因が想像つく方おられませんでしょうか?
serverでDisconnectNamedPipe - CloseHandleをしていないとか。
memory leak
133 :
126 :2010/08/31(火) 14:53:00
134 :
126 :2010/08/31(火) 15:18:20
>>131 通信一回ごとにDisconnectNamedPipeとCloseHandleを行い、
必然的に必要になってくるCreateNamedPipeを通信一回ごとに作り直せば動きます。
名前付きパイプというのはこういうものなんでしょうか?
クライアントとの接続確立一回に対して、サーバーもパイプを一回ずつ作っていく物なんでしょうか?
サーバーは一度作っておけば、何度でもクライアントとつなぎ直せると思ってたのですが、
間違いでしょうか?
それはパイプじゃなくてソケットだな
136 :
131 :2010/08/31(火) 16:07:24
勘違いしてた。 こんな感じでどうかな。 client CreateFile(pNamePipe, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); mode = PIPE_READMODE_MESSAGE| PIPE_WAIT; SetNamedPipeHandleState(hPipe, &mode, NULL, NULL); WriteFile(hPipe, pMessage, length, &bytesWrite, NULL); CloseHandle(hPipe);
DisconnectしたらConnectしなおさないといけないんじゃないの? CreateNamedPipe→ConnectNamedPipe→ReadFile→DisconnectNamedPipe→ConnectNamedPipeに戻ってループ
138 :
126 :2010/08/31(火) 16:46:44
>>136 パイプのハンドルはサーバー側しか分からず、クライアント側はパイプの名前で指定して、
ファイルハンドルを取得し、WriteFileの第一引数はそのファイルハンドルになり、
SetNamedPipeHandleStateの第一引数に入れられるものが分からないのですが、
ファイルハンドルとパイプのハンドルは同じ物でしょうか?
一応やってみるとプログラムに例外が発生してフリーズしました。
139 :
デフォルトの名無しさん :2010/08/31(火) 17:00:53
一応やってみるとプログラムに例外が発生してフリーズしました。 一応やってみるとプログラムに例外が発生してフリーズしました。 一応やってみるとプログラムに例外が発生してフリーズしました。 一応やってみるとプログラムに例外が発生してフリーズしました。 一応やってみるとプログラムに例外が発生してフリーズしました。
140 :
126 :2010/08/31(火) 17:00:56
>>137 分からない事だらけで想像でしかありませんが、DisconnectNamedPipeがサーバー側からの切断、
クライアント側はファイルハンドルのclosehandleで切断になるのかなと想像してます。
んでクライアント側から切断したあと、ConnectNamedPipeでまたないとひょっとしたら
クライアントのCreateFileで成功しないのかもしれない、つまりそれが当たりかもしれないとも思いつつ、
引数がなんか面倒そうなのと、眠気が限界なので起きてから試そうと思います。
いろいろアドバイスくださった方々ありがとうございました。
141 :
131 :2010/08/31(火) 17:11:17
The server process must call DisconnectNamedPipe to disconnect a pipe handle from its previous client before the handle can be connected to another client by using the ConnectNamedPipe function.
WH_CALLWNDPROCでフックしたメッセージを、サブクラス化以外で潰す方法はありますか? もしありましたら教えて下さい。
143 :
126 :2010/09/01(水) 09:32:34
二回目の接続に成功しました。 猫でもわかるのサイトと変えたのはシグナルによるタイミング同期ではなく、 サーバー側でConnectNamedPipeを実行。これによりクライアントがCreateFileするまで処理が止まります。 そして情報のやり取りが終った跡、DisconnectNamedPipe。 ここで全ての原因の秘密仕様として接続をConncectNamedPipeでやって置かなければ ERROR_INVALID_HANDLEがでてDisconnectが成功しない。 その結果クライアントと繋がったままのような状態になり、クライアントの二回目の接続で失敗します。 参考にしたサイトではConnectNamedPipeを使用しておらず、ググって似たような事が起こってる質問に対しては 「Connectしないで何故一回でも成功しているのか、そっちのほうが不思議だ」などの書き込みもあり、 正規の方法ではないのかもしれません。 少なくとも二回目の接続を通常の手段で行うことが不可能な作りなのではないかと思いました。
日本語で桶
最初にgoogle先生に聞くんじゃなくてMSDN読めよ…
147 :
131 :2010/09/01(水) 10:58:37
ワッ
ユーザが入力したデータをファイルに保存して、そのファイルを再度読み込んだりする状況で Unicodeの依存文字使われたときってどう管理すればいいのかな? 普通にUnicodeとして書き出すと、ファイルから編集出来ないけど、アプリで管理できればおkなの?
>普通にUnicodeとして書き出すと、ファイルから編集出来ない 95でも使ってんの?
151 :
デフォルトの名無しさん :2010/09/01(水) 13:06:39
なんだろうな notepad.exeでもないし emacsかな
ファイルに保存するだけならぴゅう太でカセットテープでも問題ないが
WideCharToMultiByte() MultiByteToWideChar()
TCHAR szBuffer[256] = TEXT("SAMPLE"); WriteFile( hFile, szBuffer, lstrlen(szBuffer) << 1, &dwWriteSize, NULL ); こんな感じで書き出すと、"S A M P L E"ってなるけど
Byte Order Markがない
>>155 マジサンクス!所で、Unicodeで出力したテキストって98でも普通に表示できるの?
98ってW系の関数なかったような
補足。表示出来るのって意味は、鷗のようにUnicode依存文字のことね
当たり前だけど表示できない
Windows95からTextOutWやExtTextOutWはサポートされている Unicodeフォントを用意すれば表示は出来る
Unicode依存文字って言い方に抵抗を感じる…
161 :
142 :2010/09/01(水) 19:17:39
改めて調べてみましたが、どうやらサブクラス化以外の方法は無いようでした。 それでは、同じくWH_CALLWNDPROCフックにて、例えば、全てのウインドウのWM_CLOSEを受け取る場合、 何所でサブクラス化を行い、解除すればよいのでしょうか。 因みに、ここでの「全てのウインドウ」はタスクバーに表示されるようなものです。
フック関係ねえじゃん 1個1個サブクラス化してまわればいいだろ
>>160 おつむがガラパゴス文字コード依存なんだろ
WH_CBTじゃあかんの?
今昔文字鏡やTRONコードなどその他の文字セットに含まれずUnicodeにのみ含まれる文字がUnicode依存文字
厨くさい表現
167 :
デフォルトの名無しさん :2010/09/02(木) 14:26:51
iCod
169 :
142 :2010/09/04(土) 16:33:49
WH_CBTで試みたのですが、HCBT_DESTROYWNDが飛んできた際、 ウインドウハンドルを取得する方法が分かりません。 ご教授お願いします。
MSDNのCBTProcのところを読み直すと良いよ。
Cの基本からやりなおしておけ
>>171 MAKEINTRESOURCEで成功するってことは IDD_DIALOG1 は整数値のリソース識別子なんだろ
そして "IDD_DIALOG1" っていう文字列でのリソース識別子は存在しない → 失敗する
リソースエディタでダイアログ作る時、 IDD_DIALOG1 ってやらないで、 "IDD_DIALOG1" ってやればTEXTの方使える。 両者は別物なので両方作ったりもできるよ
ALT+TABで表示されるダイアログと同じスタイルのダイアログを作りたいのですが、 どういうスタイルで作ればいいでしょうか? WS_BORDER | WS_POPUPだと、同じ形だけどDwmExtendFrameIntoClientAreaをしたときに フレームだけ描画されてウインドウ内が完全に透明になってしまいます
普通にCreateWindowじゃねぇの?
CreateWindowするときのウインドウスタイルをしりたいのです
窓のスタイルを記録するツールでも作れば
タスクスケジューラを使わずに自前で定時処理(毎時0分と30分等)をしたいのですが、 時刻をポーリングする以外に何かAPIでコールバックしてくれるようなものってありますか?
>>179 waitable timerを使えば時間になったら起こしてもらうことができる。
>>180 期待した動作ができそうです。ありがとうございました
>>177 親ウィンドウをデスクトップにするスタイルじゃなくてか?
WIN32API初心者なのですが、スクロールを実装するところで数日躓いています。 case WM_VSCROLLで分岐処理して、ScrollWindow()、UpdateWindow()と関数を使うまでは、分かるのですが、その後、WM_PAINTに飛んでから、どう書いていったらよいのでしょうか? 猫でもわかる、を参考にしているのですが、そこでは、画面全体の画像をクライアント領域に貼る、という話の流れなので、そうではなくてごく普通のスクロールをさせるにはどうすればよいのでしょうか。
なにをどうしたいの?
>>183 表示されるべき内容をそのまま描画するだけ。
ぶっちゃけ表示領域を全更新してしまってもいいが、
それだとScrollWindowの意味があまり無くなってしまうから、
通常はスクロールの結果無効領域になった箇所を描画する。
ちなみに、スクロールに応じてSetWindow/ViewOrgExしてくれるような
サービスは一切無いので全て自分で管理するように。
ダブルバッファリングだろ常考
別にこの場合はシングルバッファでもかまわん
俺はクライアント領域サイズのビットマップ作っといてスクロールしたらビットマップの描画更新 WM_PAINTではビットマップ貼るだけ 描画に必要な情報だけ保持
似てるけど
似てる
似てる・・・だと
似てるんじゃね?
似て非なるもの?
似てそうで似てないけど少しだけ似てる
GPUに直結してるかどうかの違いしかなくない?
は?
ひ?
ふ?
ほ?
へ?
はっ!やだ朝だ ひぃ!今何時? ふぅ.. まだ平気あと5分 へっ?急がなきゃ ホッ!トミルクでGO! 1日は断然万全
猛烈な一般保護違反が発生しました。 [OK]
204 :
183 :2010/09/11(土) 13:26:18
>>184 ブラウザを作っていて、単純に(ソケットで受信したHTTPの)文字列を描画したいのです。今のままだと、クライアント領域にはすべての文字列が描画されていないので。
>>185 ありがとうございます。
「表示されるべき内容」って僕の場合だと文字列のことですかね・・・?
いまいちこのあたりの背景がわかっていないで質問しています。
スクロールって自分で文字列を少しづつ描画させていくのでしょうか? それとも関数を使えば、スクロールすると勝手に文字列が見えてくるものなんでしょうか。
そんな漠然とした質問じゃ、いろいろとしか言いようがない。
自分で書かなきゃ誰が書いてくれると思ってるんだよ。 お前はエディットコントロールでも貼り付けておけ
スクロールメッセージのデフォルト動作は中途半端だから、 デフォルトプロシージャに処理させずに自分で書き直した方が速いと思うけどね。
何がわかっていないのかをわかっていないひとだということだけはわかった
なるほど、わからん。
>>208 おまいはなにかをいわんとしてなにもいっておらんのう
とりあえずメッセージがとんできたときにスクロールした分だけ文字列を書き直せ。
嘘を嘘と見抜けない人には2chは向いていないと思う
フォントのサイズと行数とスクロールバーの位置さえわかれば自前でなんとかなる
今の時代でAPIのセマフォやイベント同期オブジェクトを使う状況とは どんなときですか?
時代と来ましたか ちょっと笑った
スマポとかセマフォとか勝手に略されてもわからねえんだよおおお
セマフォはフルネームでセマ、、、、セマ、、、なんだっけ?
SemaphoreはSemaphoreだろ。
セマートフォン
セマフォは略称じゃねぇだろ…… っていうか、マルチスレッド当たり前のこのご時世にその質問はないわ……
スマートポン
甲種腕木式二灯場内出発信号機
Metered Sectionってどうすれば使えるの?
抱いてみたい同期オブジェクトランキング 1イベント 2ミューテクス 3クリティカルセクション 4セマフォ 5砂時計カーソル 異論は認める
iPhone iPad iPod すべてまとめると iPhoge で桶
227 :
デフォルトの名無しさん :2010/09/16(木) 12:21:54
自動的に折り返されるエディットコントロールで、 入力された文字列やコントロール幅、フォントに応じて高さを自動的に変えたい のですが、 何か良い方法はありませんでしょうか。 エディットボックスのデバイスコンテキストと描画領域をコピーして、 そこへDrawTextで文字列を書き、戻り値を取得する方法を考えたのですが、 うまくできません…
Windows APIはアセンブラ相当。
>>227 なんとなくDCにフォントを選択していない予感がする。
管理者権限の無いプログラムから、他のプログラムを管理者権限で起動させるためには どのようにすればよいでしょうか?もちろん、起動時にUACのダイアログを表示します。 起動されるプログラムはマニフェストを付加していません。
ShellExecuteEx SHELLEXECUTEINFO.lpVerb = "runas"
ShellExecute RunAsはマニフェスト要らないと思うけど 試したけど起動する
233 :
227 :2010/09/17(金) 01:49:53
>>229 それ最初にやらかしましたw
横に同じ条件で実際にDrawText実行して、すぐに気づきましたが…
結局エディットコントロールのサイズを取得するときに
EM_GETRECTメッセージ使わずに、GetClientRect使っていたために
ズレが発生していたのが原因で自己解決しました。
DrawText関数と、DT_CALCRECTフラグの組み合わせでうまくいきました。
スタティックコントロールだと、GetClientRect使わないとナンですけどね。。
234 :
230 :2010/09/17(金) 09:43:22
>> 231, 232 ありがとうございます。 今から試してみますm(_ _)m
Win32 APIで、チェックボックスやラジオボタンなどのボタンコントロールの AutoSize的なコトを実現する上手い方法はありませんか? チェックボックスのクライアント領域から、フォーカス枠のつく文字列の描かれる部分の領域を 計算できなくて困っています。 OBM_CHECKBOXESでチェックボックスのアイコンのサイズを得て、 そこからフォーカス枠2px分と、枠とチェックボックスの間5px分、 そして文字列の領域の横幅よりも広ければ、問題なく描画される"だろう"と言うところまではわかるのですが、 その文字列の領域がクライアント領域からどれだけずれているかを、 確かに求める方法がわかりません。
237 :
235 :2010/09/18(土) 03:07:05
>>236 すでにWTLでがりがり書いてしまっているので、今更wxとかには移せないです…
実際に書いてから修正する
GetWindowRectじゃダメかい?
EnumWndProcをEXEファイルで使用するとタスクマネージャで 出てくるようなウィンドウネームが拾えるのですが サービスに登録して動作させると SYSTEM AGENT COM WINDOWといった見たことの無い ウィンドウネームが帰ってきます。 EnumWindows OpenInputDesktopやOpenDesktopを使ってEnumDesktopWindows も試してみましたが結果は同じでした。 サービスに登録して動かす場合から、見えているウィンドウ名を 取得するにはどうすればよいのでしょうか。
242 :
240 :2010/09/19(日) 02:13:14
>>241 ありがとうございます。
セッション1と0と言う事で見えないとの理解でよいでしょうか。
XP・7の互換性を考えながらと言う点はさておき、
使用OSがXPなので見えても良い様に思い
OpenDesktop("default"・・・・
OpenDesktop("winsta0\default"・・・・
ともしてみましたが結果変わらずでした。。
どうも、勘違いか設定が違うのでしょうね。
「サービスはユーザに見えないデスクトップ上で動いている」
との助言よりもう少しデスクトップの指定方法を考えて見ます。
・・・違うデスクトップの感知は出来ないなんてないですよね(汗
243 :
240 :2010/09/19(日) 02:35:10
「サービスはユーザに見えないデスクトップ上で動いている」 すいません。やっと意味が分かりました。。 たとえOpenDesktop("winsta0\default"としても 説明:既存のデスクトップのハンドルを取得します。 なので無駄なのですね。。。 ちょっと指定方法を考えます。ありがとうございます。
>>240 サービスのプロパティで
「デスクトップとの対話を許可」
のチェックボックスはどうなってる?
>>243 SetThreadDesktop
ハンドルを取得しただけじゃ何も起こるわけないだろ
Windowsでマルチスレッドの勉強したいんですけど、APIを使う方法を知っておいた ほうが良いですか?
API使わずにどうやってマルチスレッドに・・・openmpか
.NETでできるかなと思ったので。
.NETだけでできる そしてマネージスレッドとアンマネージスレッドは混在させるべきでないから 無理に覚えなくていい
int flag = 0; while(1) { if(flag){ flag = 0; main() } else{ flag = 1; thread_func(); } }
>>249 そうですか。
APIを使って勉強する場合、.NETでは学べない何か利点はありますか?
ない
レスありがとうございました。 C#で勉強します。
ある
ないアル
またひとり.NETerが増えたのだ……
Win32API と .NET ってどのような違いがあるの? 今からは .NET が主流になるの?
.netはwin32apiをラップしたような感じ もちろんそれだけじゃなくて機能はいろいろ追加されてるけど
>>243 EnumDesktopWindowsはだめだっけ?
STATICコントロールのテキストを変更すると表示にゴミが残ることがあるんですけど どうやってきれいにしたらいいでしょうか
InvalidateRect
>>258 なるほど、サンクス
2つ目の質問についてはどうなのだろう?
>.Netが主流 ジャンルによる 処理速度が必要なものはWin32API 開発速度が必要なものは.Net
>>263 おぉ、分かりやすい回答ありがとう
.NETは一段階はさむから処理速度が Win32API に劣るが、開発が簡単というわけか
265 :
235 :2010/09/20(月) 00:58:58
>>239 文字領域から、GetWindowRectにあたる大きさを測れないといけないので、
目的と手段が逆転してしまいます…
>>238 やっぱそれしかないッスか…
どんな環境でも、この値が同じならいいんですけどねぇ
ドライバ作る人はセマフォ、ミューテックス、待機APIとか使うのか。
>>266 いわゆるWIN32APIは使わない
KeInitializeMutexとかZwSetEventとかドライバ用のAPIを使う
Windows環境で実時間を計測したいのですが、 QueryPerformanceCounterはCPUクロック周波数が動的に変動する環境では使えず、 timeGetTimeは精度がPCの時計に依存するので、私の環境では12時間で1秒ほど遅れてしまいます 他にタイマーとして使えるAPIをどなたか教えていただけないでしょうか
FAQ 過去スレのどっかにURLあるはず
>>246 先ずは、四人の中国人哲学者が四本の箸で飯を食う話を知っておいた方がいい。
>>269 過去スレを見れる範囲で1年分探してみたのですが、
システム時刻を取得するものしか見つけられませんでした
検索キーワードだけでも教えていただけないでしょうか
NTPじゃだめなん?
>>267 なるほど。Win32 APIますます知る必要ないな。
>>268 どんな環境でも確実に正しい計測をしたいというなら、それは無理。
何代か前の家のPCなんか、一時間に分単位で時間がずれたりしてたしなw
>>268 そういう問題があるからQueryPerformanceCounterは別のハードウェアカウンタ使ってCPUのクロックカウンタは使ってないよ。
時間と時刻のどっちの制度が欲しいの?
277 :
268 :2010/09/20(月) 13:16:29
>>272 それは全く考えてませんでした
確かにそれなら小さな誤差に抑えられますね
インターネット環境が必須のソフトなので今回はこれで実現できそうです
>>274 うちもOSの時計は酷くずれますが、QueryPerformanceCounterは24時間くらいの計測では目で見てわかるほどの誤差はありませんでした
確実に正確な計測は無理でしょうけど、OSの時計よりはマシな時計を持ってるんじゃないかなーと
>>276 ソースは他人のブログですが、環境によってはCPUのクロックを使用するそうです
自分の環境でもQueryPerformanceFrequencyはCPUのクロックとおぼしき数値を返します
あと欲しかったのは時間の方です
皆さん回答ありがとうございました
timeGetTime+NTPで実現してみようと思います
278 :
240 :2010/09/20(月) 15:46:13
240,242,243です。
>>259 前回はダメしたが解決しました。
教えて頂いたことを調べなおして以下を使用し解決しました。
OpenWindowStation
SetProcessWindowStation
OpenDesktop
SetThreadDesktop
ご助力頂いた方々と場を借りたことに感謝ですm(__)m
>>277 そのブログの記事って古くないか?
QueryPerformanceCounterがCPUのクロック変動の影響受けてたのって
2006年くらいの話だと思うが。
277じゃないけどググったら2010-05の記事で検証してるブログ出てきたぞ 俺の環境じゃ検証できないから信憑性についてはアレだけど
Windows 7ではさらにAPIが増えててQueryUnbiasedInterruptTime というのがあるらしい。 説明を読む限り精度はtimeGetTimeと同程度っぽいけど
>>280 HALによるのかな?
QueryPerformanceFrequencyでCPUクロックぽいすうちなら信用できない。
1.193182MHzとか3.579545MHzの分周ぽかったらAPM由来のカウンタで信用するとかで判断できないか?
HPETだと周波数はいくつになるの?
ググルと14318180って数字が出てきたな。 こっちのほうが精度がいいのか。おいらのBIOSはどうかな?
XPで確かめてみたM/BはDP35DP、CPUはC2D E4400 常に2000110000 だたよ。。。アチャー CrystalCPUID で見てEIST発動時でも変わらず 同環境のVirtualBox上のXPは常に3579545
うちのPCでQueryPerformanceFrequencyを実行すると 2045781って数字が出たんだがこりゃ何じゃ?
>>286 実時間の計測に使えるかは試した?
QueryPerformanceFrequencyで得られる値が常に一定なのは普通だと思うけど・・・
そういう仕様なもんだから CPUクロックが使われててかつクロック可変の環境では役に立たない
この問題ってAthlon64のCool'n'Quietで起きたんじゃなかったっけ? これはAMDのドライバ提供で修正されたし、 以降のCPUが対応を放置したりするような事はないと思うのだけどなあ。 CPUドライバが更新されていないXPでないと再現しなさそう。
CPUドライバのパッチじゃQueryPerformanceFrequencyの戻り値は常に一定という MSが決めた仕様は変えられないだろ
QueryPerformanceCounterは高分解能タイマーの現在値を返す、 としか定義されていないから大丈夫だろ。
>>290 それはRDTSCを自分で使っていたアプリじゃねーの?
Cool'n'Quietのクロック可変と、デュアルコアCPUのRDTSCのコア間での差異は
一応別件扱いなんじゃないかと思う。
KB895980とKB909944がそれぞれに対応するんじゃないかな。
>>293 それはQueryPerformanceFrequencyの返す値を指しているだけだから、
Counterがクロック可変でも一定の速度で刻む値を返せない理由にはならない気が。
どう実装するのかは良く判らないけど。
>>296 理論的には確かに不可能ではなさそうだけど
実際に一定の速度で刻むように実装されてると期待できるような状況なのかな
絵に描いた餅じゃ結局使えないんで
シベリア板から誘導されてきました。 296 名前:いやあ名無しってほんとにいいもんですね[sage] 投稿日:2010/09/22(水) 09:32:58 発信元:221.30.178.167 [1/3] プログラム板に書き込めないからここに書くけど、Spy++みたいにD&Dでウィンドウハンドルを得るにはどうすればいいの? Spy++でSpy++をSpyできなくて困る。 297 名前:いやあ名無しってほんとにいいもんですね[sage] 投稿日:2010/09/22(水) 09:38:50 発信元:221.29.84.207 [2/2] 書けるけど? 298 名前:いやあ名無しってほんとにいいもんですね[sage] 投稿日:2010/09/22(水) 09:58:33 発信元:221.30.178.167 [2/3] あ、本当だ
マルチポストか 胸が熱くなるな
マウスキャプチャーしてカーソル位置のWindowを調べてるんだろう
えぇーマルチポストと誘導されて同じ書き込みは別物じゃないんですかー!? やだ。。。いますごく恥ずかしいです。。。
デスクトップ上の何も無いことでのダブルクリックを検出したいんだが どういう実装方法が一般的?
デスクトップをサブクラス化する
何も無いこと
DLLでWindowMessageフックしてrootWindowのマウスメッセージ横取りとか
ボタンにビットマップを貼り付けたいのですが、ググってもなかなかAPIが見つかりません もしかしてボタンに貼り付けるっていう考え方が間違ってる?
オーナードローボタン
BM_SETIMAGEかBCM_SETIMAGELISTってところか?
サブクラス化
カーソルがどのウィンドウ上にあるかを確認したいのですが、 TrackMouseEvent() を使う以外に方法はありますか?
WindowFromPoint
>>314 こんな便利なAPIがあったとは…!!
ありがとうございます
FILE_SHARE_DELETE無しでCreateFileされているファイルに対して CreateHardLinkして作った新しいリンクを消す方法ってない? UNIXのunlink(2)相当のことをしたいのだけど
>>317 質問の意図が伝わっていないようだ
FILE_SHARE_DELETE無しでCreateFileされているとDeleteFileはできない
iノード相当のディレクトリエントリだけを消したいのですよ
SetFileInformationByHandleでFileDispositionInfo
320 :
316 :2010/09/24(金) 22:35:27
今すぐにだ
NtDeleteFileなら即座に消えるけどWin32サブシステムからは使われていない
(DeleteFileは
>>319 の方法で実装されている)
たぶんPOSIXサブシステムのunlinkのために存在するんだろう
VSみたいなウィンドウを自由に配置できるあれってどうやればできるの?
SetParentで親を乗り換えたりMoveWindowで位置を動かしたりして気合いと根性で
325 :
デフォルトの名無しさん :2010/09/25(土) 17:59:47
スクリーンセーバー発動中かどうかってどう判定すればいいんですか?
わかりませんでした。
328 :
デフォルトの名無しさん :2010/09/25(土) 19:48:26
いいからAPI出せや
330 :
デフォルトの名無しさん :2010/09/25(土) 20:39:52
おいおい正気なのかお前は数えることができるの、か まとめな思考のなら分かるだろうお前はまちがてるとりうことに 俺はプログラムーだから分かるんたがあまりにも非生産的だろう
C言語でおk
System.Console.WriteLine("猫");
333 :
316 :2010/09/25(土) 20:52:29
試してみた SetFileInformationByHandle(FileDispositionInfo)による方法: ・Handle取得時のAccessRightsにDELETEが無いとアクセス権無しで失敗 ・AccessRightsにDELETEを指定するとそもそもHandleを取れない ntdll.dll!NtDeleteFileによる方法: ・STATUS_SHARING_VIOLATIONで失敗 ・別プロセスのCreateFileでFILE_SHARE_DELETEが指定されていれば成功(DeleteFileと同じ) ・undocumented.ntinternals.netにはできるようなことが書いてあるが既に古い情報なのではなかろうか 誰か実際に成功する方法を知らない?
プ板でやれ
335 :
デフォルトの名無しさん :2010/09/25(土) 21:05:51
定期あげ
スレッド1で10ミリ秒単位でHeapReAllocを呼び出してデータを追加していき、スレッド2で50ミリ秒単位で 確保したポインタの内容を読み込むプログラムを実行していると、VC++のデバッグ出力に x.exe の 0x001df64a で初回の例外が発生しました: 0xC0000005: 場所 0xfeeefeee を読み込み中にアクセス違反が発生しました。 という出力が頻繁に表示されるのですが、解決策はありますか? ちなみに、スレッド1のデータ追加処理を実行している間は、フラグを立てて、 スレッド2の読み込み処理をwhile(flag) Sleep(1); のように停止させています。
キチガイみてーなプログラムだな
>>336 クリティカルセッションか、ミューテックスくらいかねぇー。
処理間隔空けるのもいいかもねー。
>>338 便利なAPIですね!
ありがとうございます
ビジーウェイト。。
ヘッドロック
>ちなみに、スレッド1のデータ追加処理を実行している間は、フラグを立てて、 >スレッド2の読み込み処理をwhile(flag) Sleep(1); のように停止させています。 もし仮にそのようなロジックでするなら while(flag) よりも read/writeそれぞれでシーケンシャルナンバーを記憶し スレッド1でデータを追加→writeのシーケンシャルナンバーをインクリメント スレッド2はreadのシーケンシャルナンバーがwriteのそれより小さかったら読み込み・インクリメント にしたほうが ま だ ま し
344 :
336 :2010/09/26(日) 02:53:01
クリティカルセクション使ったら全然でなくなりました! 本当にありがとうございます よくよく考えたら、1ミリ秒あればかなり処理が進んでしまってますねw
flagを扱う際のアウトオブオーダーには注意しとけよ。 何も対策しないで他スレッドから見ると、 flagは立っているのにデータはまだ追加されていない状態があり得るからな。 まあ、クリティカルセクションを使った時点で問題無くなったとは思うが。
346 :
デフォルトの名無しさん :2010/09/26(日) 17:21:12
>>343 ま だ ま し とか言って無知な自分をごまかしてるわけねw
スレッドならクリティカルセクションとか使うのが普通だろJK スレッドの基礎レベルだ。勉強しなおした方が良い
同期を取るのが必須なのは当然だけど、 最近は、自前でクリティカルセクションを管理するよりも、 たとえばIntel TBBやVC++10のconcurret_queueみたいに、 同期処理入りのライブラリを使う方向に進んでいるように思う。
349 :
デフォルトの名無しさん :2010/09/26(日) 17:57:44
HWND p; //デスクトップのハンドルを得る p = FindWindow("Progman", "Program Manager"); p = FindWindowEx(p, NULL, "SHELLDLL_DefView", NULL); p = FindWindowEx(p, NULL, "SysListView32", NULL); //デスクトップにF5のkeydownメッセージを送信 SendMessage(p,WM_KEYDOWN,VK_F5,0); //----------------------------------------- 環境はWindowsXPproSP3 32bit VC++Express2010 エクスプローラに更新通知出したいのだけどだめだったワケワカメドンダンズオシエテケレ
350 :
デフォルトの名無しさん :2010/09/26(日) 18:00:36
はいはいあげあげ
というわけでhageましたスマソ
並列なんてほんとに問題ごとの最適化が必要になるから ライブラリなど共通部分でできることなんて同じ作業を等分割するくらいしかない しかも等分割で扱えるデータなんてあまりない
353 :
349 :2010/09/26(日) 18:14:05
SendMessageをPostMessageにしたら成功しました お手数かけました
よく、クリティカルセッションだっけ、クリティカルセクションだっけ?? と、ごっちゃになる。あんまり使ったこと無いけどね。
>>349 ポインタじゃない奴の変数をpにするのはいただけないな
>>355 ハンドルてポインタだとおもってました。どもです。
ウィンドウを識別するための「何か」でしかないよ。 ポインタかもしれないしそうじゃないかもしれない。 なんだかわからないし意識してはならないそういうもの。 実際はただのテーブルのインデックスらしいが。
Send/PostMessageでメッセージパッシング型っぽいスタイルの マルチスレッドプログラムも書けるよ。 GoogleのGoみたいに、そういう書き方ができる言語を使ったほうが コーディングの効率はいいだろうけどね。
>>356 昔はポインタだったから許容範囲でしょう。
むしろ昔こそUINTのtypedefだろ。 今のところ、Cではポインタのtypedefで定義している。 C++でnullptrキーワードが導入されるけど、 ハンドルに対しても使うべきか自分の中では審議中。
C++どんどん壊れていくなw 型チェック機構厳しすぎだろ
>>361 特にそうでもない。というかどこを緩められるんだ?
364 :
デフォルトの名無しさん :2010/09/27(月) 08:23:04
>>363 シェル操作のAPIなんて便利なものがあったんですね。全部レジストリやメッセージ経由だと思ってました。サンクス
なあに、わしはちょっと背中を押してあげたにすぎんよ
かっけえ
368 :
デフォルトの名無しさん :2010/09/27(月) 16:14:43
ペペロンチーノをしらんというのか
だが本物の回答者が書いてるとは限らない
370 :
デフォルトの名無しさん :2010/09/27(月) 20:19:28
hage
372 :
デフォルトの名無しさん :2010/09/27(月) 21:58:04
sage
一日二回うんこが出るのは異常ですか?
1回で出し切れ
ただの食い過ぎ
376 :
デフォルトの名無しさん :2010/09/28(火) 09:00:41
377 :
デフォルトの名無しさん :2010/09/28(火) 12:04:27
vista 以降で、プログラム内で自分アプリが管理者モードで起動しているか、ログインユーザとして起動しているかを 知るAPIはありますか? 無ければ簡単に知るすべはないでしょうか?
379 :
デフォルトの名無しさん :2010/09/28(火) 13:00:40
>>378 知らないならレスしないでください。ウザいだけです。
382 :
デフォルトの名無しさん :2010/09/28(火) 17:55:58
もっとAPIスレを盛り上げようぜ! うおおおおおお!!!!
煽ってもなにも出て来ませんよ
煽ってもなにも出て来ませんよ。
中にだれもいませんよ?
中にだれもいませんよ?
中にだれもいませんよ?
うぃん32あぴ
中にだれもいませんよ?
Mac32APIもあるのかな
Mac32APIもあるのかな
大事なことなので2度言いました。
と、見せかけて
中にだれもいませんよ?
Lazyとは中々高度な術を。。。
ねちょねちょするよ
397 :
デフォルトの名無しさん :2010/09/28(火) 19:51:23
定期あげ
アク禁解除されたとたんこれだ 2chはもう死んでいる
じゃあ、質問してくれ
ところで削除したアプリのレジストリーの設定項目っていつになったら消えるんですか?
巣に帰れ
WIN32_FIND_DATAの64bit版ってないんですか?
何が64bitなんだよ
まぁ誰かを見下さないと生きていけないのですよね
一番糞なAPIってなんですか?
CopyRect
SetPixel
KillYou
>>409 128ビット分もデータを転送するのが大変だった時代の名残。
CopyRectってそんなに糞なのか 今度使ってみようかな
413 :
デフォルトの名無しさん :2010/09/29(水) 18:18:41
中にだれもいませんよ?
略して中だれ
test
略中
構造体のコピーが出来ない言語(ANSI以前のCとかPascalとか)用。
構造体化石
419 :
デフォルトの名無しさん :2010/09/29(水) 23:19:09
誰だ今構造体でエッチな事考えた奴は!
ちょっと発想が良くわからん
ちょっと発想が良くわからん(キリッ
>>420 みたいな奴ってリアルでも屑なんだろうなぁ
うちの会社にもいるわ
マジでどういう意味だよ unionなら何かエロイのは分かる
426 :
デフォルトの名無しさん :2010/09/30(木) 00:03:54
↑
うちの会社にもいるわ(27歳 無職)
unionえろくないよ
API「おい俺の話をしろ」
CopyRect「」
CopyRectより糞なAPIがあるはず このままじゃCopyRectがかわいそう
ご近所が布団たたきを始めると あわてて洗濯物を捕り込む奴挙手。
437 :
デフォルトの名無しさん :2010/09/30(木) 03:23:54
2番煎じ
440 :
デフォルトの名無しさん :2010/09/30(木) 09:16:06
なんだこいつ
なんでも自演乙する人ってまだいたんだ
構造体のコピーなんてできるの忘れてたわ
CopyRectって使ったことないんだが、memcpyみたいなもん?
構造体のコピーができなかった頃からあるAPIだしなw
MakeSureDirectoryPathExistsなんかはTCHARになってない時点で糞
CommandLineToArgvWも何故かA版がないな
CommandLineToArgvAの代わりにMSVCRT.DLL:__getmainargsを使っている MakeSureDirectoryPathExistsWの代わりはShCreateDirectoryExを使えと書いてあるな
FreeLibraryAndExitThreadってなんの意味があるんだよwww そう考えていた時期が俺にもありました。
いみあったの?
解説 FreeLibraryAndExitThread 関数は、次のように実装されています。 FreeLibrary(hModule); ExitThread(dwExitCode); わからん・・・
自爆dllを作る場合にとても重要 DLLにスレッドプロシージャがあった場合 FreeLibraryから帰った瞬間に落ちる
FreeLibraryAndExitThreadならFreeLibraryから戻ってくる場所はkernel32.dllの中なので安全にExitThreadを呼べる
>>446 int wmain(int, wchar_t**) や __wargvが使えなかった頃のためのAPIだからな
なるほど。 自分で自分をアンロードしたいと思ったことがなかったからわからなかった。 勝手にExitThreadするとCRTのクリーンアップ処理が走らなさそうだけど (実質)CRT使用禁止でCreateThreadとかするの?
CRTは動的リンクスルノデス
糞なAPIというより、全体的にネーミングが気に入らない
そうですか
そうですよ
PHPってカオスなのか?
visual studioのC++/CLIのように 画面に部品を貼り付けて、ソースを生成してくれるような ヴィジュアルエディタっていうものは、Win32APIではございませんか?
>>461 っMFC
って言うか製品版のVCってできないっけ?
Express以外出来るよ
DAYONE~
MFCは自作できるよ
>>462-465 ありがとうございます
製品版ならできるのですね。。。
MFCとWin32APIの違いをよくわかっておらず
とぼけたことを利いてしまっておりました。すみません
MFCはMS謹製のWIN32APIのラッパーライブラリ郡だ。C++できないと厳しい。 でもC++./CLIできるんだから大丈夫だよね。
でもみんなMFCくらい自作してんじゃないの
MFCとかWTLがあるのに、わざわざ別のものを一から用意するのは時間の無駄。
わざわざ一から覚えるのはもっと時間の無駄。
2chが一番無駄
スレ伸びてるときは読まなくて良いの法則
475 :
デフォルトの名無しさん :2010/10/01(金) 07:33:32
DateTime_GetSystemtimeで日付対応の奴ない?
結局コントロールから文字列取得して区切り記号毎に文区切ってバッファに挿入ノシ
ぎょえぇぇ!!!!!
>>476 #define DateTime_GetSystemtime(hdp, pst) (DWORD)SNDMSG(hdp, DTM_GETSYSTEMTIME, 0, (LPARAM)(pst))
#define SNDMSG ::SendMessage
http://msdn.microsoft.com/en-us/library/bb761769 (VS.85).aspx
wParam Must be zero.
lParam A pointer to a SYSTEMTIME structure.
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
なので普通に対応してるよ。
内部的にというのではなく表示させたいという事であれば
DateTime_SetFormatのマクロを使って年月日時分秒のフォーマットを指定してやりゃいいよ
>>479 ,478
後になっちゃうけど研究してみる。忙しい時間にありがと。
どういうことだよwww
DateTime_GetSystemtimeいろいろやってみたけどやっぱday,month,yearは所得してくれないみたい。
正確な時間がほしいならネットから持ってくるしかないな
精確な時間は、空から降って来るし、原子時計も中古なら100万くらいで買える。 ネットからもってくる以外にも方法は有る。
じゃあソースください
486 :
479 :2010/10/01(金) 14:02:08
>>482 普通に拾えるけどなぁ
case WM_INITDIALOG:
SendMessage(GetDlgItem(hwnd,IDC_DATETIMEPICKER1),DTM_SETFORMAT,NULL,(LPARAM)"yyy/MM/dd HH:mm:ss");
return FALSE;
case WM_COMMAND:
switch(LOWORD(wp)){
case IDC_BUTTON_SET
{
SYSTEMTIME st;
GetLocalTime(&st);
DateTime_SetSystemtime(GetDlgItem(hwnd,IDC_DATETIMEPICKER1),GDT_VALID,&st);
}
return FALSE;
case IDC_BUTTON_GET
{
SYSTEMTIME st;
std::stringstream ss;
DateTime_GetSystemtime(GetDlgItem(hwnd,IDC_DATETIMEPICKER1),&st);
ss << "wYear : " << st.wYear << "\n" <<
"wMonth : " << st.wMonth << "\n" <<
"wDay : " << st.wDay << "\n" <<
"wHour : " << st.wHour << "\n" <<
"wMinute : " << st.wMinute << "\n" <<
"wSecond : " << st.wSecond << "\n" <<
"wMilliseconds : " << st.wMilliseconds << std::endl;
MessageBox(NULL,ss.str().c_str(),"",MB_OK);
}
return FALSE;
ご苦労さんっ
tm構造体使ってた\(^o^)/
時間とは何か
深いですね
時と時の間だから時間
俺も昔は時の間で修行したものだ
なんだっけ、名前が出てこない……
精神と時の間?
あぁドラゴソボソルーか
CopyRect (C) 2010
あんさんおもろすぎるでガハハ
498 :
デフォルトの名無しさん :2010/10/01(金) 23:47:49
RegGetValueA() にRRF_RT_REG_EXPAND_SZ を単体で指定すると失敗するんだけど何でだろう? #pragma comment(lib, "Advapi32.lib") #include <windows.h> #include <stdio.h> int main() { char buf[MAX_PATH] = ""; DWORD size = sizeof(buf); DWORD type = 0; LONG errcode = RegGetValueA( HKEY_CURRENT_USER, "Environment", "TEMP", RRF_RT_REG_EXPAND_SZ, &type, (PVOID) buf, &size); printf("code: %ld\n", errcode); // ERROR_INVALID_PARAMETER printf("type: %d\n", type); printf("size: %d\n", size); printf("value: %s\n", buf); return 0; } RRF_RT_REG_EXPAND_SZ | RRF_NOEXPAND にするとなぜか成功するんだが。
ボタンをサブクラス化してそのウインドウプロシージャの中でボタンが押下されたことを 知るのってどうすればいいの? 単純に考えると ・ボタンにフォーカスが当たってる、かつボタンのリージョン内にカーソルがある場合のWM_LBUTTONUP ・スペースキー押下 で判断すればいいと思うんだけど正しい取り方とかありますか? あと、別の話だけどボタン上でマウスダウンしてそのまま親ウインドウまで持ってって マウスアップすると親Windowクリックしても親ウインドウにフォーカスが行かない気がする バグかなこれ・・
自己レスすまん バグじゃなかったボタンからフォーカス外れないだけだった
人間は人と人の間だから人間だと言うのか
>>498 winreg.hに解答が載っていた。
ドキュメントの方が説明不足っぽいなあ。
>>502 あー、本当だ。これはひどいな。
- RRF_RT_REG_EXPAND_SZ は RRF_NOEXPAND と一緒に指定しなければならない
- RRF_RT_REG_SZ は環境変数の展開までやってくれる
とヘッダーに書いてあった。
ありがとうございました。
504 :
デフォルトの名無しさん :2010/10/02(土) 03:40:37
HeapAlloc で確保したメモリも、OS の気分でページアウトされるよね? ページアウトされないメモリを確保したい場合、どの API 呼べばよい? デバイスドライバしかできないのかなぁ。。 教えてエロい人!
APIの宣言というより セグメント指定して確保じゃなかったかな
>>504 AWE(Address Windowing Extensions)関連のAPIを使えば良かった筈。
グループポリシーで「メモリ内のページのロック」が許可されているユーザーしか使えないけど。
VirtualLockが説明文読む限りできそうだけど
UN*Xで言うsuidみたいな誰が実行しても特権つきで実行できる仕掛けはありますか? 目的:管理者がProgram Files以下にインストールしたアプリを一般ユーザが使用する時に 確実にその時点での最新版にするアップデートプログラムを作りたい。 検討した手段: 特権必須 - ソフト自体は権限いらないのにアップデートのためだけの管理者縛りは入れたくない サービス化 - 常駐は避けたい BITS - IBackgroundCopyJob2::SetNotifyCmdLineに期待してみたが、 ユーザ権限で起動されるらしい(当たり前だけど)
ShellExecuteでこのスレ検索してみ
Windowsに不可能は無い!
511 :
504 :2010/10/02(土) 15:47:35
もうエロい人達かっこよすぎ
>>505 セグメントの種類に関わらずページアウトの対象っぽい・・・
>>506 AWE把握!調査してみまつ
ただ制限があると不特定多数を利用者に位置づけられないですねぇ。
>>507 VirtualLock でイケル!と思ったんだけど、
プロセスごとページアウトされると全部イッチャウっぽい。
>508 タスクスケジューラ
>>509 runasだと管理者のIDとパスワードが必須になるので要求を満たせません。
あと最新であることを保証するために
ショートカット→アップデートプログラム→アプリ本体という順番で起動します。
>>512 タスクスケジューラで特定アプリを起動する前という条件指定できますか?
514 :
デフォルトの名無しさん :2010/10/02(土) 17:05:20
515 :
デフォルトの名無しさん :2010/10/02(土) 17:08:48
>>514 すげー!!!
高度な内容のレベルが高いために俺の技術が高みに向上が著しいぞ
初心者だけでなく、プロもここみてより一掃の勉強を実行するべk
516 :
デフォルトの名無しさん :2010/10/02(土) 17:10:53
一瞬見て3秒で戻るボタンを押した。そんなページだな。
518 :
デフォルトの名無しさん :2010/10/02(土) 17:12:25
>>514 まぁ初心者なら知らないのも無理はないな社会の上で活躍してるプロプログラマーならjkだな
519 :
デフォルトの名無しさん :2010/10/02(土) 17:14:01
>>517 確かにプログラミンと関わりがない人間には理解できないだろうな内容がすごく高度的で
典型的な誰にも勧められないページ
521 :
デフォルトの名無しさん :2010/10/02(土) 17:19:10
そんなことはないな
522 :
デフォルトの名無しさん :2010/10/02(土) 17:20:57
技術情報を独占したいんだろう有名なのを知らないのだろうか
523 :
デフォルトの名無しさん :2010/10/02(土) 17:23:09
>>514 レベル高いなーまだ発見されてないAPIまで載ってる
なんでそんなに必死なんだよ。その糞サイトにウィルスでも仕込んだの?
525 :
デフォルトの名無しさん :2010/10/02(土) 17:26:24
神だな
あれだけの高度情報量をどうやって・・・・
> まだ発見されてないAPI ここ笑うところ?
間抜けな発言は残しといた方が区別しやすいよ。 どうでもいいけどsuidなんて過去の遺物だろ。 M$がサービスでも用意してくれてなければ無理に決まってる。 用意されてたとしても任意のプログラムでOKとかはないだろうから署名とか要るんでない?
あぼーん
エディタでたらめにキーボードを叩いてコンパイルしたところ、 未知のAPIが発見された
あぼーん
dumpbin /exports
537 :
デフォルトの名無しさん :2010/10/02(土) 22:56:10
定期あげ
あぼーん
こんなスレあったのか。
あったのよ
Win32APIはMac36AIPとどう違うの
基本的には同じ ただし内部処理ではOSごとに異なった実装になっている
あぼーん
あぼーん
あぼーん
forkはできますか?
CreateProcessでおk
全然おkじゃないんですが・・・
なにがおkじゃないの?
os違いを理解してない馬鹿、もしくは釣りはほっとけ
fork & exec* ではなくて、fork だけをしたいって事じゃね?
あぼーん
あぼーん
556 :
デフォルトの名無しさん :2010/10/03(日) 16:54:27
タブレット関係に詳しい人、お願いします。 自作アプリへのフリックの影響を無効にしたいのです。 コンパネのペンとタッチのフリックを有効にしても、 IEやメモ帳はその影響を受けていないようです。 大元のチェックを外せばもちろん目的は達せられますが そうではなく、IEやメモ帳のようにフリックの影響を受け ないようにするにはどうしたらいいでしょうか? タブレット関係のメッセージを適切に処理すればいいのかも しれませんが、情報が少なくて困っております。 それともドライバの設定のどこかに、影響させないアプリを 登録とかするんでしょうか? よろしくお願いします。
ここまでOS情報なし
大元のチェックを外せ
OS情報(笑)
あぼーん
>>513 サービスにするしかないと思う。
サービスだからと言って常駐する必要はない。
アップデート確認が終わったらとっとと終了すればいい。
確かGoogleのアップデータがそういう挙動だったはず。
一般ユーザでサービス起動できたっけ?
あぼーん
お前、それ面白いとでも思ってんのか? あまりしつこくすると、荒らしとして報告するよ。
あぼーん
あぼーん
だめだコリア
なるほど、いつものキチガイか。
>>563 すまん、元の質問をよく読んでいなかった。
Googleのはスタートアップ: 自動 (遅延開始)だから、
アプリ起動時のアップデートではないんだろうな。
ネトゲのアップデータとかが近い物なんだろうけど Program Filesにインストールするなとか平然と書いてあったり 常時昇格を要求したりと行儀最悪なのしか見たことないなー
Program Filesにインストールするとなんかまずいの?
>>573 最近のウインドウズはウイルス対策やその他の事情で、
プログラムファイルずに書き込むのにはアドミンとかの特権がいるの。
Program Files書き込むのに特権が必要なのはNT系は最初からだろ。 特権がいるのはC:\とかでも同じ話だし。 問題になるのは6.0以降のバーチャルストアの方。
ルート直下の制限はXPから
ネトゲってみんな「基本無料」だよな
せやね
「基本」ね。 でも、気を抜いてるとあっという間に尻の毛まで抜かれる。
尻毛怖くて剃れないから抜いて欲しい
シリアル通信でBREAK状態になった事はEV_BREAKで取れるけど、 BREAK状態が解除された事はどうやって検出すれば良いでしょうか?
583 :
556 :2010/10/04(月) 00:27:32
>>508 最新版かどうかを確認するだけなら管理者権限いらないんだから、
アップデートが必要なときだけ管理者権限を要求するようにしたら?
Program Files内のファイルを更新するのに管理者権限が必要なのは自然だと思う。
>>508 ClickOnce使えば10秒で解決する問題だな
一般ユーザーでもインストール済みサービスの起動はできるよ。 例: Secondary Logonサービス サービスのインストールはできないけどそれはインストーラがやればいいでしょ。 suidバイナリのインストールだって一般ユーザーはできないんだし
>>582 EV_BREAK状態じゃなくなったらとか
>>587 EV_BREAKはBREAK状態になると飛んでくるイベントなのですが。
それの状態はどのように取得するのですか?
>>582 BREAK信号ってのは、要は一定期間シリアル通信でゼロを送り続けた状態(スタート/ストップビットもない)
だから解除ってのはないけど
敢えて言うなら、何らかの通常の通信が送られてきた場合がそれに当たるんじゃないかと
>>589 送信側はSetCommBreakでブレーク状態(信号線を0に落とす)を設定して、ClearCommBreakで
解除できますよね。
やはり、タイムアウト設定して、読んでみてエラー(CE_BREAK)で確認するしかないのでしょうか。
この方法はフレームエラーとか拾っちゃっうと分離が面倒そうだなあ。
>>586 Secondary Loginって自動起動じゃね?
停止した状態でrunasしてみたら失敗したし
592 :
デフォルトの名無しさん :2010/10/04(月) 17:49:24
定期あげ
>>588 BREAK信号の処理はやったことないからわからないけど
他の人も書いてるEV_BREAKの検出だけやって、通常の待ち受けしてればいいんじゃないの
MSDNの中に、やり方が書いてありそうだけど
>>591 んー? うちのSecondary Logonは停止してたしrunasで勝手に実行中になったけどなあ。
一般ユーザでか? Administratorsのユーザなら勝手にサービス起動したがUsersだとエラー吐いたぞ
596 :
デフォルトの名無しさん :2010/10/04(月) 23:08:52
ではやはりあげておくべきですね。
いやUsersだけど UAC有効にしてるせい?
サービスクラスのものをホイホイオンオフされたそら大変だわな。
Windowsはなんでもほいほい
600 :
デフォルトの名無しさん :2010/10/05(火) 09:15:23
下がりすぎ
601 :
うざお :2010/10/05(火) 09:42:13
あの みなさんは、プログラム書くとき、毎回 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nShow) こういうのを、手打ちしてマウスか? それとも、どこかメモ帳とかにコピペして、使ってますか? どうやって管理していますか?
それくらいはさすがにもう覚えたから暗唱できるので何も管理してない
603 :
うざお :2010/10/05(火) 10:35:00
>>602 さん
覚えてないのは、どうしてますか?僕も、このくらいなら、覚えましたが、
ウインドクラスの登録、とか、覚えていないのが、多いです
独自エントリーを使っているのでWinMainは書かない
毎回MSDNでリファレンスを引いてる
606 :
うざお :2010/10/05(火) 10:52:26
つまり、コピーアンドペーストで、かいてるんですね 覚えるのは、無駄な努力ですか
覚えようとして覚えたんじゃなくて 使ってたら勝手に覚えるもんだろ。
毎回調べるより覚える方が楽もしくは効率がいいと考えるならそうすればいい おれは暗記とか苦手だから苦労して覚えるより毎回調べる方が労力が安いと思ってる そのへんは人によって違うだろうから自分にとっていいと思う方を選べばいいんじゃね
丸暗記しないまでもどんな引数を取るかくらいはだいたい覚えとくだろ普通
610 :
うざお :2010/10/05(火) 11:06:08
そうなんですね なんか、ウィンドウズプログラミングの本見たら、ソースがすごい量あるので、 これ全部覚えるのは、難しいと思いました。
せめて辞書登録位しろよw
612 :
うざお :2010/10/05(火) 11:21:53
ウィンドウズの、辞書って、突然消えたりしますよね しかも、長い単語は、登録できない
うざお? ウザ男? マジウゼーっス
こいつの、読点の、付け方が、まじで、うざいな
こいつがコーディングしたらすごい事になりそうだな
616 :
デフォルトの名無しさん :2010/10/05(火) 12:32:29
Win32api で自分のプロセスのメモリー使用量を簡単に取得する方法はないでしょうか?
GetProcessMemoryInfo
618 :
デフォルトの名無しさん :2010/10/05(火) 13:08:28
んなわけあるか
619 :
うざお :2010/10/05(火) 17:17:12
うざおです 真面目に、質問します プログラミングで、windowsは、なれない型や構造体、引数、などが、多いですが そういうのを、全部覚えるのが、普通ですか? 僕は、結構馬鹿なので、覚えられるか、微妙です そういう場合、いい保存方法の知恵があったら、教えてください 環境は、xpでeclipse CDTを使ってます
620 :
616 :2010/10/05(火) 17:25:19
>> 617 ありがとうございます。試してみますm(_ _)m
呪文を覚えるんじゃないから カレー作るとしたら材料に何がいるか考えればいいのと同じ
スレ違いかもしれないですが、
DLLプリロード攻撃について調べていて
根本的なところでわからなくなったので質問します。
>>69 ,
>>90 あたりに情報が出てますがあまり話題にはなってないみたいで。
DLLの明示的なロードはLoadLibrary関数を使うわけで、
ここで引数に絶対パスを使わずに名前だけを指定すると
カレントディレクトリから同名の不正DLLがロードされるかも
しれないから危ないよ、ってことだと思ってます。
この場合、暗黙的なロードの場合も同様の脆弱性があると考えても
いいんでしょうか?カレントからロードするのは同じだと思うのですが。
623 :
デフォルトの名無しさん :2010/10/05(火) 19:26:26
ぷりぷり〜(^ω^)
>>622 LoadTimeLinkingに関してはそうじゃない?
まぁKernel32はKnownDllだからRunTimeLinkingに直してLoadLibraryすればいいけど
情報量0
カロリー0
すっきりとした甘さ
629 :
622 :2010/10/05(火) 20:59:17
>>625 動作の本質的な違いがわかってないからですかね。
>>624 自作のDLLを 暗黙的なロードしていた場合のようなケースを
言いたかったです。情報足りませんでしたね。
Windowsプログラミングに疎いんですが、KnwnDllでもなく
マニフェストをつけていないような自作DLLを暗黙的ロードで
使うことは、よくあることだと思っているんですが。
脆弱性に関する情報にはそこが特に明記されていないのがわからなくて。
それとも、そもそも暗黙的なロードをそんな使い方するな、ってことですかね?
630 :
デフォルトの名無しさん :2010/10/05(火) 21:00:00
ほしゅ
グローバルフックかけてアクティブなウインドウのタイトルバーに時間表示したい。んで、他のアプリケーションがウインドウタイトルを読みに来た際、バッファに退避させた本来のタイトル名にリダイレクト(?)させる方法てある?
ttbaseのプラグインに似たようなことやってるやつ発見したからそれ見てみるノシサンクス
創造と違ってたorzなにかいい情報ないですかね@@?
グローバルフックかけてるならウィンドウタイトルを読むときに APIフックでにすげかえればいいんでないの
普通にGETTEXTに対応すれば良いんじゃないのか
>>635 ,636
調べてみたらWM_SETTEXTもらってた@@;
サンクス
何言ってんだよ 継承してオーバーライドだろ
WM_GETTEXTだった
>>636 のまんまいうとおりだったw
ありがとうございます。
>>638 おとといプログラミングはじめたばかりでよくわからない@@
win32ってcじゃないの??敬称ってC++じゃないの??
2日の割に高度だな
ほぼ寝てませんorz
c++嫌いなの?
んん、、、なぜそんなことを??まあ図星ですけどw 実際使ってみるとcの関数で満足なんでクラスの使い道がよくわからなくて・・・
C++使わないと、ある程度規模が大きくなってきたときに詰むぞ 悪いこと言わないから、C++を勉強したほうがいい
Linus「C++プログラマはウンコ。寄ってくるな」
むー・・・ 了解です。がんばってみます!!
649 :
デフォルトの名無しさん :2010/10/05(火) 23:54:11
creat()
うずうずするぜ・・・!
Hello, Everybody! How are you? I'm crazy! HaHaHa...
Win32APIには変な名前の関数はないから問題ないな ……ないよな?
>>622 XPにしかないDLLを使うならリンカオプションでサブシステムバージョンを5.1
VistaにしかないDLLを使うなら6.0
Win7にしかないDLLを使うなら6.1にすればいい
初歩的な質問で申し訳ないのです。CreateThreadを使ってスレッドを作成すると スレッドハンドルが返ってきますが、そのスレッドハンドルを使って、そのスレッドが 存在しているかどうか調べる方法はありますでしょうか。 スレッドの終了までメインプロセスにてSleepで待機して、スレッドが終了したら 新しいスレッドを作成するというをしたいです。 よろしくお願いします。
655 :
654 :2010/10/06(水) 08:39:27
自己解決しました。 WaitForSingleObject(hThreadHandle, INFINITE); /* スレッド終了まで待つ */ ありがとうございました。
おk
スレッド固まってんぜ!溜まってんなぁ、オイ(迫真)
そんなAPIで大丈夫か?
まあ使ってくうちにいろいろわかってくるでしょ 方法そのものは間違ってないし
ウィンドウメッセージをハンドルしてるなら MsgWaitForMultipleObjectsEx
662 :
デフォルトの名無しさん :2010/10/06(水) 18:56:34
下がりすぎ
663 :
デフォルトの名無しさん :2010/10/06(水) 19:32:54
大盛況なだ!!!
664 :
デフォルトの名無しさん :2010/10/06(水) 20:54:33
横浜の人いますか〜?? いたら友達になりましょう>< 私は19歳♀です♪
665 :
デフォルトの名無しさん :2010/10/06(水) 21:28:56
25歳だけどいいかな
C++って別の意味でソースがごちゃごちゃになるのでちょっと・・・
それはおまいの頭の中がゴチャゴチャだからだよ
プロトタイプ?なんてもういらないだろ c++
お前がそう思うんならそうなんだろ
670 :
デフォルトの名無しさん :2010/10/06(水) 23:44:51
ここゎ出会いコミュなので関係ない話はよそでやってくださぃ><
>>632 です。C++のクラスを即席いい加減に学んできました;;
んで
>>638 が言ってた内容、どのような設計のクラスを想定しての指示だったのか未だわかりません。なのでそのことについて何かしら助言をいただけたらうれしいです・・・
プログラマの間で常識となってるWin32、C++における基礎的な設計方針か何かあるのでしょうか?
いい加減に学んできて「教えろ」って馬鹿にしてんのか
俺には分かるがなあ
それを知ってどうするというのか。
謎は深まるばかりである。
>>638 の前後を見ても何について話してるのかすらわからん
自分が分からないからって必死すぎ
前後にクラスの話なんて一切出てない状態でいきなり湧いてるのに何の話かわかったらエスパーだな
680 :
671 :2010/10/07(木) 14:33:45
そういうことでしたか「@@ なにかきまりきまった事があるのだと思ってました。サンクス。
681 :
デフォルトの名無しさん :2010/10/07(木) 14:42:49
この程度でエスパーってwwwwww
サブクラス化じゃないのか?
683 :
671 :2010/10/07(木) 15:26:03
>>682 何を継承したのかがわからないもので・・・っていうかこれスレチ?
FastCopyのソースがしっかりしてそうなのでそれ見て研究します。 ありがとうございました;;w;;ノシ
サービスプログラムから特定ユーザのレジストリ(HKEY_CURRENT_USER)の値を取得したいのですが、 実現するためのAPIは存在するでしょうか?
LoadUserProfile
HKEY_USERS の下にいっぱい並んでるのが各ユーザのだと思ってた
688 :
685 :2010/10/07(木) 17:24:52
>> 686 ありがとうございます。 LoadUserProfile を調べてたところ、レジストリハイブのロードを見つけたので、これで実装できそうな気がします。 試してみます。
689 :
デフォルトの名無しさん :2010/10/07(木) 18:22:21
腐ってやがる
早すぎたんだ
コンボボックスに1025byte以上の文字をCB_INSERTSTRINGするとメモリが壊れるんだけど俺だけ? 直後にCB_GETLBTEXTLENとCB_GETLBTEXTすると長さが一致しない。
SHGetFolderPathかWin32Apiで各ユーザディレクトリの1階層上って取れたっけ? XP:C:\Documents and Settings Vista:C:\User
>692 ANSI-Unicode変換レイヤ(本名は忘れた)の影響じゃないか?
>>693 %HOMEDRIVE%%HOMEPATH%の1つ上を取るのは?
>>693 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\ProfilesDirectory
直読みで
どうせユーザープロファイルってここと関わりのない別の任意の場所に作る事ができるし
698 :
デフォルトの名無しさん :2010/10/07(木) 23:09:48
プロファイルぺろぺろ
「秘密の花園」って最近聞かないよね
SendMessageのWM_GETTEXTでメッセージボックスの説明のテキストを取得しようと思っているのですが、 その為にまず、説明のハンドルをFindWindowExで取得しようと思っているのですが、 現在、FindWindowExでメッセージボックスのハンドルを親に指定して、 IntPtr.Zeroから検索を開始して、1個目に!マークのアイコンのハンドルが返り 2個目に説明部分のハンドルが返ってくるので、この方法で動作しているのですが、 このような親以下の2個目という特定の仕方でも大丈夫でしょうか? クラス名を指定できれば良いのですが、!マークのアイコンと説明は同じStaticクラスなので どちらなのか特定できないです。 確実な方法があったら教えていただきたいです。
座標を使え
>>700 どちらも取得してテキストの内容なり矩形で判別すればいいだけでは?
>>692 ANSIビルドでビジュアルスタイル使ってる?
>>700 アイコンのほうはSS_ICONがついてるな
706 :
デフォルトの名無しさん :2010/10/08(金) 00:31:59
mciSendString使って録音しようとしてるんですが、 open->record->stop->saveが一つの関数内で実行されると保存できるんですが、 open->recordとstop->saveを別にやるとファイルが保存されてない。 なぜに?
707 :
デフォルトの名無しさん :2010/10/08(金) 01:48:09
情報が少ない
おなかがゆるい
>>694 よく分からない。
>>704 ANSIだけどwin2000だからビジュアルスタイルは使えない。
長めの文字列を渡すとCB_GETLBTEXTの時に今度はアクセス違反で落ちる。
どのみち長さを制限しなきゃいけないとは思っていたけど、扱いづらいな。
>709 いや、だから変換レイヤの影響だろうって。ちゃんと調べてみな。
コンボボックスに1025byteってすごいなw
すいません。 timeBeginPeriod関数で精度を上げたいと思うんですが、 これを呼び出すタイミングって ゲーム開始時に呼び出しといて、 ゲーム終了時にtimeEndPeriodを呼び出すだけでいいんですか? それともFPS制御をしてる処理部分だけをこれらの関数で囲めばいいんですか?
>>712 時間を取得する瞬間だけではなく
精度制御したい期間全てを囲む必要がある
ただしシステム全体に影響を与えてしまうので
ゲーム全体ではなく設定画面の表示中などもし精度が不要なら戻した方が良い
>>712 ということは精度に影響してくる部分だけでいいってことですよね?
timeGetTimeとかSleepを使ってる部分だけで使えばよいということですよね?
timeEndPeriodの意味ないよね
>>714 Sleep使う前後だけ囲んだらダメだよ。
Sleepを使うループを囲まないとダメ。
っていうか、今どきのPCで気にするような問題ではないので
WinMainの頭で設定しちゃっていい。
そんなの気にしてたらメディアプレーヤーも使えない。
地デジだって数秒遅れても問題ない デジタルってそういうもん
>>717 丁寧にありがとうございます。Sleepごと囲むようにします。
ありがとうございました。
いらんことまで同期させてシステム全体をパフォーマンスダウンさせる作戦
もしSleep以外のタイミングでタスクが切り替わったらどうなるかとか 理詰めで解けると思うんだが
スライドバーで画面の明るさ変えるツール作りたいんですが どのAPI使えばいいんですか? RadeonのCCCでDesktopの明るさを設定するような感じのものです。
デスクトップに黒一色の半透明リージョンでも作って貼れば?
>>710 MSLUってやつ? 9x系じゃないから関係なさそう。
リストビューについての質問です。 int index = 0; LVITEM li = { LVIF_TEXT, index, 0, 0, 0, (LPWSTR)_T("hoge"), 0, 0, 0 }; ListView_InsertItem( hWnd_list, &li ); LVFINDINFO lf = { LVFI_STRING, _T("hoge"), 0, 0, 0 }; int index_of_hoge = ListView_FindItem( hWnd_list, 0, &lf ); 上記のコードのようにhogeがリストの先頭にある場合に、index_of_hogeが-1になってしまうのですが、 何が間違っているのでしょうか? 先頭以外ではちゃんと正しいインデックスが得られているのですが。
>>726 上手くいきました。ありがとうございます。
待機しながら新規プロセスの監視ってできますか?FindFirstChangeNotificationみたいな
730 :
デフォルトの名無しさん :2010/10/08(金) 22:02:16
中にだれもいませんよ?
>>728 WaitForSingleObject
732 :
デフォルトの名無しさん :2010/10/08(金) 22:59:46
中にだれもいませんよ?
733 :
デフォルトの名無しさん :2010/10/08(金) 23:28:11
中にだれもいませんよ?
>>728 PsSetLoadImageNotifyRoutine
ドライバ有りならPsSetCreateProcessNotifyRoutineだろ
>>514 のサイトを見ればほとんどの問題は解決するな
テンプレ追加したらどうだろうか
737 :
728 :2010/10/09(土) 00:21:41
大事なこと書き忘れてて申し訳ありませんが、常駐して未知のプロセスの起動を監視したいと思ってます
>>731 どうもです、その関数は以前簡単に調べたことがあったんですが
例があらかじめわかっているプロセスの監視ばかりだったので別の方法を模索していました
その関数で上のようなことができるんならもっと調べてみますが…
>>734-735 どうもです、調べてみたら英語ばかりですね…なかなか時間がかかりそうです
改めて見てみたけど
>>514 のサイトすげーなおいww
これはもっと評価されるべきjkwww
アフィリエイト乞食ってやつか
↑嫉妬乙
なんでも自演とか言うのは簡単でいいなぁ
書き込むだけでいいし、小学生でもできる簡単なお仕事です
これでいくらぐらい稼げるの
アフィなんておまけだろ、重要なのは情報量 お前らはサイト見るときまずは広告を片っ端からクリックしていくのか?ww
一部のアンチが騒いでるだけだろ
この手の宣伝って削除対象にならんの?
批判するなら論理的に、な?低能じゃ無理だろうけどww
まさかとは思うが自覚できてないとかね
また日本語不自由者が
756 :
デフォルトの名無しさん :2010/10/09(土) 03:27:06
いいからAPI出せや
宣伝じゃなくて私怨で晒してるだけだろ
普通に宣伝だろ、アホか
いやいや、本人様が被害者を装って出てくることもありえるぞ 過去にそういう例があった
しかし情報の質は本物だな、第2のMSDNと言ってもいい しかもAPIだけじゃなく様々なライブラリまで網羅している
読み方は「あぴ」だよね?
>>762 みたいに侮辱するだけの人間って生きてても意味ないよね
精神異常者とか言っちゃう人間って
最近Win64APIというライバルスレが立ったようだな
>>716 16bitの時代はちゃんとtimeBeginPeriodに対応して呼び出す必要があったが
今は終了すると自動的にtimeEndPeriodされるようだ。
いやそれガセだから
メディアプレーヤを常時起動してればtimeBeginPeriodは必要ない
769 :
デフォルトの名無しさん :2010/10/09(土) 18:38:35
ではやはりあげておくべきですね。
「このプログラムを実行する際は必ずメディアプレーヤを起動しておいてください」
デフォルトでミリ病単位なのにそれ以下にできないtimeBeginPeriodに意味はあるの?
たぶん
>>716 の意図とは違うけど質問
質問が意味不明
よく分からないけど デフォルトが1xミリ秒とかなんだよ
771の手にかかると分解能15.6msecはmsec単位にされるらしい
だから「ミリ病」って言ってんじゃん
timeBeginPeiodを使うアプリがスタートアップに入ってるとか ブラウザがChromeだとか
timeEndPeriodはいかなる時でも必要
タイマーとかだったら間隔を15.6msecにすればいいことじゃん 分解能を変える必要があるのかと μsecまで高精度化できるならまだしも
てか15.6msecなんてできないなw それこそ1msec以下は設定できない
780 :
デフォルトの名無しさん :2010/10/09(土) 20:32:15
時の流れに終止符を打て!
>>779 Windowsが100nsで保持してるのを知らないアホ
?
Windowsが100nsで保持しているそうですwwwww
なんか見たことある気がしたんで調べたら、 FILETIME構造体ではファイル時間が100ナノ秒間隔でカウントされてた 本気でそんな精度があるのかどうかは俺は知らない
ミリ秒より小さな桁で数えたければ、QueryPerformanceCounterとかがある。 timeBeginPeriodは1ミリ秒が限界ということだよね。
1/1024?
>>785 timeBeginPeriodの精度はそんなに高くない
たまに1msで回ってくれることもある、程度のもの
788 :
デフォルトの名無しさん :2010/10/10(日) 03:59:03
DXUTの存在もっと速く教えろよ(#゚Д゚)ゴラァ
ゆるさん
いや違うな。 timeBeginPeriodは最小で1msの精度になるってことだろ。
Win32APIでジョイスティックの入力ってできます?
joyGetPoxExで検索するのよ
1 件 (0.10 秒) あるのかよ・・・
アハハ・・・ joyGetPosExだなw
名前ダセエwwwwwww MSDNでもググル検索に引っかからない関数けっこうあるのな
タブコントロールが背景のStaticに隠れてしまうのですが、 これが正しい挙動なんでしょうか? 他のコントロールはちゃんと表示されるのですが。 case WM_CREATE: // 背景の作成 CreateWindowEx( 0 , _T("STATIC") , NULL , WS_CHILD | WS_VISIBLE , 0 , 0 , WINDOW_WIDTH , WINDOW_HEIGHT , hWnd , NULL , g_hInst , NULL ); // タブコントロールの作成 CreateWindowEx( 0 , WC_TABCONTROL , NULL , WS_CHILD | WS_VISIBLE , TAB_X , TAB_Y , TAB_WIDTH , TAB_HEIGHT , hWnd , NULL , g_hInst , NULL ); // 他のコントロールの作成 ...
800 :
デフォルトの名無しさん :2010/10/10(日) 20:07:02
定期あげ
ウィンドウズ的にはジョイスティックっていう名称が一般的なの? ゲームパッドとかジョイパッドとかいろいろ呼び名あって統一されてない気がするけど
Microsoft® DirectInput® は、マウス、キーボード、ジョイスティック、およびその他のゲーム コントローラの入力デバイスに加え、フォース フィードバック (入出力) デバイスもサポートするアプリケーション プログラミング インターフェイス (API) である。
またまたご冗談を
>>801 開発者向けは知らんが
少なくともエンドユーザー向けには「ゲームコントローラー」のようだな
Windows7のコントロールパネル見る限り
>>799 STATICをそんな使い方してもいいのか・・・?
>>805 やっぱりSTATICの使い方が不適切だったみたいです。
背景をSTATICで設定するのをやめて、hbrBackgroundで設定したら正しく表示されるようになりました。
ウィンドウクラスの設定の部分はコピペで作っていたので、こんな問題があるとは知りませんでした。
ありがとうございます。
ジョブスティック
Visual Basicのフォームアプリのコントロールの EnabledプロパティをAPIを使ってTrue/Falseを切り替えたいのですが どんな方法で出来ますか? コントロールのハンドルは取得出来ています。
809 :
808 :2010/10/11(月) 01:14:47
連続ですみません。 SendMessageでWM_ENABLEを送ったらテキストボックスをTrueに設定できました。 ボタンも同じように試したのですが、フォーカスが設定されるだけで Trueにならないのですが、ボタンはこの方法では無理でしょうか?
何でわざわざAPI使うんだよ button.Enable = True;とでもしろよ
811 :
デフォルトの名無しさん :2010/10/11(月) 07:21:16
なんでプログラマって本を結末から読むの?
スレ違いだから
↑誇らしげに反応してるのが実に馬鹿っぽい
釣り……ってレベルでもないけどね
久しぶりに誇らしい気分になれたよ
SetWindowLongでボタンのウインドウスタイルを変更するのは?
スレ違いだから
const DWORDを返すAPIをおしえてくれ!
意味分からん
もうだめだこのスレ
もうだめだこのスレwwwwwwwwww
もうだめだこのスレwwwwwwwwwwwwwwwwwwww
もうだめだこのスレw/*/$
で、MSはなんでやたらめったら変な型を作り出すの?
他の環境に移れない頭を作るためだよ
BOOLのくせに-1ってなんだよ、ってなったのは覚えてる
827 :
デフォルトの名無しさん :2010/10/11(月) 19:32:47
ブール!!!!!!
プ板でやれ
てか何でBOOLって4バイトも使ってんの? 馬鹿なの? ここで問題、bool が1ビットではなく8ビットも使っている理由とは?
sizeof(bool[2])
1ビットにしたところでメモリ上ではバイトアライメント分使ってしまう
せーいかい!
てかintのマクロじゃね?
>>833 BOOLとBOOLEANとboolの区別が出来るようになれよ
い、今起こったことをありのままに話すぜ! 簡易ブログで呟くつもりが間違ってスレで呟いたら、いつの間にかクイズに正解していた! 何を
836 :
デフォルトの名無しさん :2010/10/11(月) 22:42:33
後付けネタ大会始まるよー!
837 :
デフォルトの名無しさん :2010/10/11(月) 22:53:00
始まるでザマス
ふぐぉおおおおおおおおおおおおおおおおお
>>837 お前のせいでこのスレ終わりかけたんだぞ分かってんのか?このまま終わるかかもだが
841 :
デフォルトの名無しさん :2010/10/12(火) 01:10:32
↑誰かこれ翻訳して
すまん俺にも何を言ってるのか分からん
リッチエディットコントロールで文字のサイズの変更がしたいんですが、設定しても半角文字なら設定したサイズになりますが、 全角文字にした途端にデフォルトの文字サイズに戻ってしまいます。 プロシージャのところで止めておかなければいけないメッセージでもあるんでしょうか?
844 :
デフォルトの名無しさん :2010/10/12(火) 04:18:56
DIBでMSペイントの塗り潰しと同じことするにはどうすればいいんだ? 再帰とかで試していたがわけわからなくなってきた
ExtFloodFill
846 :
デフォルトの名無しさん :2010/10/12(火) 07:29:20
847 :
デフォルトの名無しさん :2010/10/12(火) 09:17:47
なるほど
あずにゃん
ペロペロ
__ , ´::::::::::::::::::::` 、 /::::::::::::::::::::::::::::::::::::::::::\ /| /::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ_ / | /`i::::::::::/::::::::::::::::::::::::::::::l::::::::::::::::::i::ヽ `'ー-‐''" ヽ、_. i::::::|:::::::/:::::::::::::::::,ィ:::::::::::::!:l::::l::::::::::l:::::', /. |::::::!::::::!:/::l:::::l::::/ |:::::::::::::|:l、:l::::::::::|::::::i か っ も | . l::::::l::::::|:i::::l:::::l:/ l:::::::::::::}ハ::|:::::::::li::::::l ァ て う. |...!:::::lヽ:::!:!::::!:::::!--‐'!:,::::::::/ー|::|:::::::::!l::::::l | 約 ペ ヽ|:::::l `!:|::::l、:::| 、 lハW, - l/|::::::/ l::::::l | 束 ロ >::l |::l::::|cにニヽ r ニヽ/::::/:i. l::::::l | し ペ /:::::! l::ヽ::!、 ////////// i.l/::::| !:::::l | た ロ |.l:::::l _!:::::`i:.`i 、 _(二コ _, ィく_!::::l:::l !:::::l | じ は | !::::l/:.:.ヽ:::::l:.:.:! \ ̄/ !:.l:.:.|::::l:/ヽ. l:::::l ッ .ゃ .し |l:::::i:.:.:.:.、:.:.\l:.:.:lr/^^くv'^ヽ:.!:.:l/':.:.:.:} l:::::l ! ! な な !::::l|:.:.:.:.:.\:.:.:.ヽ{__ } _{_':.:.:.:/:.:.:.i !:::::! い .い ヽ、_.:.:.::.:.:ヽ:.:./:.:.:.`.く!/:.:.:.i:.:/:.:.:.:.:.:.| l:::::l で ./ :.:.:.:.:.:.:.:∨:.:.:.:.:.:.o〉:.:.:.:.:.V:.:.:.:.:.:.:/ !:::::! す /. !:.:.:.:.:.:/:.:.:.:.:.:.o〈:.:o:.:.:.:.:.\:.:.:.:.} l:::::l 〈 ヽ:.:.:./:.:.:.:.:.:.:.:.:.:/:ヽ:.:.:.:.:.:.:.:.:ヽ:./ l:::::l
うるせえよゴキブリヘアーが
俺の認識が間違ってるんだろうけどなんか目が怖い
succ :: Integer -> Integer succ n = n + 1
855 :
デフォルトの名無しさん :2010/10/12(火) 19:48:43
let rec f n = f (n + 1);;
WCHAR buf[256]; これを L" " で埋める命令はない?
wmemset
umeumeset
_tcsnset_s
_tcsset_s
CopyRect
MOV
umeumeset
864 :
デフォルトの名無しさん :2010/10/12(火) 22:20:22
どれが最強なの
MOVで頑張れば一番速い
ZeroMemory
_setLspace
FillMemory
>>856 WCHAR buf[256];
LPWSTR sp=L" ";
int i;
for(i=0;i<sizeof(buf);i++){
buf[i]=sp[0];
}
WCHAR buf[256]={L" "};
最近のCPUはたるんでるから好きなだけぶん回せばいいよ
L" "ってことは、空白とヌル文字の繰り返しで埋めるって事? なんか地味に面倒そうだ。
いやそこはアドレスってボケの方が良かったな
WCHAR buf[256]={};
#define buf L" "
880 :
デフォルトの名無しさん :2010/10/13(水) 10:14:16
いいからAPI出せや
じゃ、APIでw int i; WCHAR buf[256]; FillMemory(buf,sizeof(buf)); for(i=0;i<_countof(buf)-1;i++){ lstrcatW(buf,L" "); }
普通に256個で初期化すれば WCHAR buf[256]=" (中略) ";
ところで_T()っても時定数にも使えたのな
工学では時定数はお前が言っているのと別の意味を持つ。おかしな略語使うな。
も、文字定数
887 :
デフォルトの名無しさん :2010/10/13(水) 18:25:16
TCHARで切り替えられる作り方をするのが普通
も時定数ワロタ
最近9x使わないからUNICODEとANSIを切り替えることが少ない
複数プラットフォーム対応のライブラリってほとんどANSIじゃない? いちいち変換するのが面倒でそういうの使う時はついANSIになってしまう
一応TCHARで組んでるけど 多分うにこーどでないとバグる
文字数はっきりしてるほうが楽だよな
っサロゲートペア
もう64ビットくらい使っちゃえよ
w ↑これ8バイト
EDITコントロール作るんだけどね WS_HIDEなままで これのHDCから見た目撮れる?
うん
899 :
デフォルトの名無しさん :2010/10/13(水) 21:12:47
ピャピャピャー
いや無理だろう
WM_PAINTがこないと
902 :
デフォルトの名無しさん :2010/10/13(水) 21:41:23
いいからAPI出せや
だから初心者は
>>514 を見ろ
このサイトは次スレからテンプレ入りする約束が確約された専門技術高度情報である
だが断る!!
906 :
905 :2010/10/13(水) 22:29:33
907 :
デフォルトの名無しさん :2010/10/13(水) 22:58:27
sample.exeにopenprocessでメモリ読み取るツールなどを遮断するにはどうしたらいいですか? openprocess関数を失敗させる みたいな
読み取らせたかない部分を別の実行ファイルにして 瞬時に終わらせるとか
>>891 ANSIというか他のプラットフォームではUTF-8なこと前提でワイド文字を使わないな
>>907 Protected Processにする(Vista以降)
すべてのOSで可能なのを頼む
>>912 sptd.sysとかネトゲのゲームガードのようなマルウェアまがいのことしないと無理
少なくともスレ違い
>>907 CreateProcessのセキュリティ記述子を設定すればできるよ。
エクスプローラとかから起動されると設定されていないので、
必要な設定にして自分自身をCreateProcessで再起動するようにする。
915 :
>>907です :2010/10/13(水) 23:52:02
Protected Processについてググりましたが、よくわかりません。 OSは気にしないので、外部プロセスがreadprocessmemoryなどでメモリを読み取れなくさせようと思います。 DLL Injectionで何かをフックすれば可能ですかね?
916 :
>>907 :2010/10/13(水) 23:58:40
>>914 なるほど。createprocessのセキュリティ記述子の設定して再起動ですか。。
簡単なサンプル頂けませんか?
TCHAR使っても完全に文字コードの互換保つのに面倒な部分出てくるしな
string使えないと不便でしょうがない
wcscpyとwcslenで代用
921 :
>>907 :2010/10/14(木) 01:13:59
>>914 のセキュリティ記述子を設定しました。
普通にメモリ読み込めるんですけど・・・・
#include <windows.h>
#include <aclapi.h>
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
{
TCHAR szAccountName[256];
DWORD dwSize;
DWORD dwResult;
EXPLICIT_ACCESS explicitAccess;
PACL pDacl;
DWORD dwAccessMask = FILE_GENERIC_WRITE | FILE_EXECUTE | GENERIC_READ;
dwSize = sizeof(szAccountName) / sizeof(TCHAR);
GetUserName(szAccountName, &dwSize);
BuildExplicitAccessWithName(&explicitAccess, szAccountName, dwAccessMask, GRANT_ACCESS, 0);
SetEntriesInAcl(1, &explicitAccess, NULL, &pDacl);
if (SetNamedSecurityInfo(TEXT("test.exe"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION, NULL, NULL, pDacl, NULL) == ERROR_SUCCESS)
MessageBox(NULL, TEXT("DACLの設定に成功しました。"), TEXT("OK"), MB_OK);
else
MessageBox(NULL, TEXT("DACLの設定に失敗しました。"), NULL, MB_ICONWARNING);
LocalFree(pDacl);
return 0;
}
922 :
>>907 :2010/10/14(木) 01:15:34
DWORD dwAccessMask = FILE_GENERIC_WRITE | FILE_EXECUTE | GENERIC_READ; この部分をWRITEだけにたら、起動すらできなくなります。 起動はできるけど、あくまで外部プロセスからメモリを読み取らせないのであって、起動自体に制限はかけたくないです。 よろしくお願いします。
CreateProcessはどこへいったんだ
924 :
>>907 :2010/10/14(木) 01:42:47
#include <windows.h> #include <stdio.h> int main() { PROCESS_INFORMATION pi; STARTUPINFO si; int ret; ZeroMemory(&si, sizeof (si)); si.cb = sizeof (si); ret = CreateProcess(NULL,"C:\\test\\test.exe",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); if (!ret) { DWORD errcode = GetLastError(); char *lpMsgBuf; fprintf(stderr, "起動失敗 %x\n", errcode); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL,errcode,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 既定の言語 (LPTSTR) &lpMsgBuf,0,NULL); fprintf(stderr, "エラー内容\n%s", lpMsgBuf); exit(1); } CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); return 0; } あれ・・・どうやって2つあわせたらいいんだろ・・・
オーナードローしたボタンを連打するとitemStateがおかしくなります。 具体的にはボタン押下状態でODS_SELECTEDフラグが立ちません。 以下がボタンダウンしているにも関わらず青ボタンになります。 DRAWITEMSTRUCT* ds = (DRAWITEMSTRUCT*)lParam; if(ds->itemState & ODS_SELECTED){ //赤でボタン描画(ボタンダウン状態) }else{ //青でボタン描画(ボタンアップ状態) } itemStateの使い方が間違ってる/回避方法などあればご教授お願いします。
926 :
デフォルトの名無しさん :2010/10/14(木) 02:31:48
>>913 分からないならレスしなければいいのにwwwwww
マッコリ純生
928 :
>>907 :2010/10/14(木) 02:34:21
CreateProcessでセキュリティ記述子いじってプロセス再起動させる ことによって、デバッガなどがReadProcessMemoryでメモリを読み取れなくさせるプログラムが、やっぱりわかりません。 どなたか、ご教授お願いします><
921のコードはexeのセキュリティ記述子を変更しようとしているから readprocessmemoryの成功とは全く関係ない 922のようにexeを起動できるかどうかに関係するだけ readprocessmemoryを失敗させるんなら exeではなくプロセスのセキュリティ記述子を変更しないと
↑さっさとコード張れやカス
つーか チート対策するほど需要(利益)のあるアプリが出来たのなら そういうところ(人)に依頼すればいいだけでは? そういう人の立場での質問だったらご愁傷さまですけど。
936 :
>>907 :2010/10/14(木) 08:21:22
>>934 ようはそんな感じですけど、
ターミネートプロセスの禁止ではなくREADの禁止だから〜
ってのと、CreateProcessで〜
ってのがよくわからなくなりました。
プロセス起動中のセキュリティとファイルのセキュリティ記述子が別ということはわかりました。
>ターミネートプロセスの禁止ではなくREADの禁止だから 全く知識の無い俺が該当ページのサンプルプログラムを見て勝手に想像すると PROCESS_TERMINATE で TerminateProcess が禁止できるなら PROCESS_VM_READ にすれば ReadProcessMemory が禁止できるはず! って思ったりするが(以下ry
つーかアクセス権いじって禁止しても管理者なら再設定できたりしないの?
真面目な話 こんなので対策出来ると思ってるの? ユートピアすぎる
940 :
939 :2010/10/14(木) 09:27:52
ユートピア言いたいだけでした。すみません
kernel32.dllを書き換えて自分が起動するときはそれを読み込むようにする、とか。
俺がチートするなら、メモリの状態を解析するよりも先にexeファイルをいじる
943 :
デフォルトの名無しさん :2010/10/14(木) 10:24:16
急に話のレベルが下がったな
リストを作る命令を教えてください
SSDT hookとかでおk
946 :
>>907 :2010/10/14(木) 11:31:15
うさみみとかでプロセス開こうとすると、開けないっていうオンラインゲームのセキュリティなんですけど、そういうツールの簡単バージョンを作りたいわけですが、 実用性はまだないですが。 それでターゲットのセキュリティ記述子(プロセス )を設定すればできると思ったわけですが gameguardがいい見本でした。
947 :
>>907 :2010/10/14(木) 11:34:24
そういや
>>934 のサンプルそのままコンパイルしてやるとアクセス拒否されました!とかでないのは64bit環境だからですか?
サンプルプログラムがTerminateProcessしかチェックしてないからじゃないの
RestartProcess(szKey, PROCESS_VM_READ);
950 :
デフォルトの名無しさん :2010/10/14(木) 12:19:44
DetoursのAPIフックを使えば簡単にできる らしいのですが、どうなんでしょうか?
その見本にしたいらしいGameGuard自体が抜け穴だらけなわけだが
952 :
>>907 :2010/10/14(木) 12:53:02
抜け穴だらけっていうのはどういうことですか?
953 :
>>907 :2010/10/14(木) 13:05:48
>>949 RestartProcess(szKey, PROCESS_VM_READ);
これにしてみました。
#include <windows.h>
#include <aclapi.h>
void RestartProcess(LPTSTR lpszKey, DWORD dwRemoveAccess);
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)
{
TCHAR szKey[] = TEXT("restart-key");
if (lstrcmp(GetCommandLine(), szKey) != 0) {
MessageBox(NULL, TEXT("再起動します。"), TEXT("OK"), MB_OK);
RestartProcess(szKey, PROCESS_VM_READ);
return 0;
}
MessageBox(NULL, TEXT("終了します。"), TEXT("OK"), MB_OK);
return 0;
}
(省略・・・)
デバッガから普通にメモリ読み取れるんですけど・・・
コンパイルしました。
http://pinkch.info/win32/
954 :
デフォルトの名無しさん :2010/10/14(木) 13:35:22
きもい
>>952 それくらい自分で予想もできないで人に聞くなら相応の金を払ってその手のを買うべき。
クラックやら何やらを行う人間はあらゆる穴を探そうとするしどの穴を使ったか教えてくれない。
1プロセス1スレッドなアプリがCPUコア0で動作している場合、 タスクマネージャ等でユーザーが明示的に切り替える場合を除いて たとえば負荷状況に応じて自動的にCPUコア1に切り替わるといったことはあるんでしょうか?
startupInfo.cb = sizeof STARTUPINFO;
lockかける前のプロセスをデバッガで見てるとか?試して無いので...
962 :
>>907 :2010/10/14(木) 17:47:14
TCHAR用の関数選んでも処理の書き方次第で普通に依存するからなー
再起動します。 は見えるで、 終了します。 も見えるってことなのかな?
>>956 SetThreadAffinityMaskというAPIがある位だから、切り替わることもあるだろ。
CPUキャッシュとか勿体無いから、頻繁には切り替わらないだろうけど。
とりあえず横スクロールしないと全文見えないのが腹立つ
■開発環境 Windows XP SP3 VC++7.0 VB6.0 ■動作環境 Windows 7 ウィンドウズサービスをVC++で開発しています。 EnumWindowsを使用し、ウィンドウハンドルを取得して、VBにメッセージをPOSTする仕様です。 XPでは問題なく動作するのですが、 Windows 7ではEnumWindowsでVBのウィンドウハンドルが取得できません。 (EnumWindows自体は正常終了しています) Windows 7でウィンドウハンドルを取得する方法はないでしょうか? サービスはローカルシステムアカウントで動作しています。
セッション0分離でggr
アクセス許可どういじってもデバッグ特権持ってるユーザーは
(管理者ならデフォルトで持ってる)アクセス許可無視して開けるから無駄
だから最初からVistaはProtected ProcessにしてXPは
>>913 だって言ってるのに。
自分で試さないと納得できないならなんで質問するの?
970 :
デフォルトの名無しさん :2010/10/14(木) 22:11:25
定期あげ
971 :
デフォルトの名無しさん :2010/10/14(木) 22:13:34
夏だな・・・。
こんなスレあったのか
Protected Process(Vistaのみ) * Kernel(OS)レベルでプロセスを保護 * Microsoft公認rootkit? o デバッガのアタッチなどから保護する機能を提供 * ただしMicrosoftの認証が必要
埋め
梅
デバッッガッー!
さあ、ググってて、偶然見つけた内容だから...
979 :
925 :2010/10/14(木) 23:47:04
>>929 ありがとう。
ちゃんとボタンがDOWNするようになりました。
Win7にもaudiodg.exeはあるみたいだからあるんじゃない
埋め
982 :
>> 907 :2010/10/15(金) 01:50:39
Win7 64bitでGameGuardが起動する前にCheat Engineなどを起動してもGameGuardが起動されればメモリが遮断されるというあれです。 32bit版ではGameMon.desは自分自身のプロセスさえも隠蔽していたが64bit版では隠蔽はされていなかった。
983 :
>>907 :2010/10/15(金) 01:54:40
君が実現するには何年も掛かりそうだけど 覗かれて困るようなことでもしてるのかな?
マジな話GameGuard買ったほうが早いと思うけど
だからその面倒な仕掛けのGameGuardすら簡単に突破してメモリ内容見られるのに お前の頭でどうにかできると思ってるのかと
カーネルモードでグリグリしちゃいなYO!
> メモリ遮断 じゃなくて、他の方法考えたほうが良さそうだけど 読まれて困るデータのアドレスをもごもご...
GameGuard起動している中でメモリ読むってどうやんの
DLL injectionとかしておけば、容易に読める。 nProtectが動いている時限定で、特殊なint 2eHが有効になるから、 それを使えばいけそうな気もするする。
コンソールアプリを外部アプリとして実行したいんですが、CreateProcess使ったあとに そのコンソールアプリへctrl-cを送りたい場合はどうすればいいんでしょうか?
>>990 kwsk頼む
int 2wh?
WallHack系ツールは不正プログラムとして落とされるはずだが…
知らないなら無理してレスしなくていいから
SendConsoleCtrlC()
996 :
>>907 :2010/10/15(金) 19:19:10
なーんも
998 :
>>907 :2010/10/15(金) 19:25:37
ファイルロックとメモリ読まれないようにするのは別ですか
基礎からやり直しませう
にゅう
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。