ということで、作ってみた。
MyWPFButtonTest
C++/CLI+Win32APIでダイアログの土台を作って、リソースのSTATICのところに
hwndsourceを作成。
そこに、xamlで作ったページを貼り付けて、hwndsourcehookにより、
xamlで発生させたWindowsのMessageをWin32API側で受けれるようにした。
xamlの方には、ボタンクリックによってWM_COMMANDをSendMessage()するように
C#で書いておいた。
xaml+C#はdllにして、Win32APIのWinMainとリンクさせる。
参考にしたのはWPFのMSDNサンプルだったので、時計の秒針表示が残っている。
実際書いてみて思ったのは、C++/CLIで久しぶりにマネージコードを書いてみたんだけど
ビルドするまでの環境整備がわかりにくいわこれ。
VisualStudio2015でテンプレートからプロジェクトを作成して、ビルドできるように
するまでやり方知らないと一苦労><
やれフレームワークの参照が足りないだことの、WindowsAPIのライブラリのリンク指定が
ないだことのとコンパイラに文句言われ続けて萎えた。
UWPだとC++/CXになるの?
よく知らんけど、C++/CLIってこのまま置き去りにされるんか?w
2017年2月8日水曜日
2016年1月2日土曜日
iwebbrowser2で作ったwebブラウザにyoutube/embedを貼り付ける
今回、少し悩んでしまったのがコレ。
ググったら答えが見つかりました^^
こちらをみると、貼り付けたwebブラウザが(ie)がie7エミュレーションモード(?)で
動作してしまうから、ということらしいです。
ということでそこに貼ってあったリンク先を参考にして
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS
と
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
にuoclist.exeのキーを作成したら、無事にembedのyoutoubeを貼り付けることができました。
ググったら答えが見つかりました^^
こちらをみると、貼り付けたwebブラウザが(ie)がie7エミュレーションモード(?)で
動作してしまうから、ということらしいです。
ということでそこに貼ってあったリンク先を参考にして
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS
と
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
にuoclist.exeのキーを作成したら、無事にembedのyoutoubeを貼り付けることができました。
ラベル:
プログラミング
2013年10月5日土曜日
VHScrCapのunlock
考えてみた。
VHScrCapを操作する関数はすべてCOMで提供され、その中にunlock関数が含まれている。
その書式は、special_unlock(BSTR, BSTR)
インストーラ付属のアプリだと制限がないっぽい(special_unlock()を実行しているっぽい)
BSTRを生成するためのAPIは、SysAllocString()
次にやることは、もうおわかりですね。OllyDbgでアプリを実行し、SysAllocString()にブレークポイントを仕掛けるw
ということで、制限をなくすためのキーを知ってしまったwww
VHScrCapを操作する関数はすべてCOMで提供され、その中にunlock関数が含まれている。
その書式は、special_unlock(BSTR, BSTR)
インストーラ付属のアプリだと制限がないっぽい(special_unlock()を実行しているっぽい)
BSTRを生成するためのAPIは、SysAllocString()
次にやることは、もうおわかりですね。OllyDbgでアプリを実行し、SysAllocString()にブレークポイントを仕掛けるw
ということで、制限をなくすためのキーを知ってしまったwww
ラベル:
プログラミング
2013年9月29日日曜日
キャプチャが取りあえず動くレベルになった(自分用メモ)
ここまでで、できたことわかったことのメモ
videoInput は、ver.1991でないとVHScrCapから正常に取得できないので、このバージョンを使用。
(ソースはあるので差分をとれば原因はわかると思うけど、めんどくさいので後回し^^;;;)
VHScrCap
微妙に使いにくいのと、demoモードでしか動かせないので、不特定多数に使わせるには無理があるw
COMをC++から操作してキャプチャ位置を設定するが、demoモードでは設定が保存されない、キャプチャ画像に横線が10本入る、という制限あり。自分用に使うには、そんな制限は乗り越えられるんだけど。。。
アプリ本体
OpenGLにテクスチャを貼り付けて拡大縮小の負担軽減(videoInputでの実装の移管)。
とりあえず動くレベルでclient.exeのゲーム画面をキャプチャするアプリの作成は完了。
追記:
VHScrCapでのdemoモード起動の条件がいまいちわからない。
OpenGLの命令を発行しただけでdemoモードに移行してしまう。
これって、VHScrCapによってプロセスに何か仕込まれているんじゃ、と疑っている。
今までは、client.exeに攻撃する側だったのですが、逆に攻撃される側になってるwww
攻撃される側になって、その防御ってどうすればいいんだろう、と悩んでしまいます。
防御したとして、攻撃した側が誰なのか?調べるのが難しいよね。DLL仕込まれたとして、そのDLLを誰が仕込んだか、なんてわかりゃしない><
追記:
画像一応付けてみます。分かりにくいですが、右下の画面は別モニタのキャプチャ画像です。
ほぼイメージ通りw
アプリ開発は、最初のイメージを如何に正確に描けるか、が重要ですね。
videoInput は、ver.1991でないとVHScrCapから正常に取得できないので、このバージョンを使用。
(ソースはあるので差分をとれば原因はわかると思うけど、めんどくさいので後回し^^;;;)
VHScrCap
微妙に使いにくいのと、demoモードでしか動かせないので、不特定多数に使わせるには無理があるw
COMをC++から操作してキャプチャ位置を設定するが、demoモードでは設定が保存されない、キャプチャ画像に横線が10本入る、という制限あり。自分用に使うには、そんな制限は乗り越えられるんだけど。。。
アプリ本体
OpenGLにテクスチャを貼り付けて拡大縮小の負担軽減(videoInputでの実装の移管)。
とりあえず動くレベルでclient.exeのゲーム画面をキャプチャするアプリの作成は完了。
追記:
VHScrCapでのdemoモード起動の条件がいまいちわからない。
OpenGLの命令を発行しただけでdemoモードに移行してしまう。
これって、VHScrCapによってプロセスに何か仕込まれているんじゃ、と疑っている。
今までは、client.exeに攻撃する側だったのですが、逆に攻撃される側になってるwww
攻撃される側になって、その防御ってどうすればいいんだろう、と悩んでしまいます。
防御したとして、攻撃した側が誰なのか?調べるのが難しいよね。DLL仕込まれたとして、そのDLLを誰が仕込んだか、なんてわかりゃしない><
追記:
画像一応付けてみます。分かりにくいですが、右下の画面は別モニタのキャプチャ画像です。
ほぼイメージ通りw
アプリ開発は、最初のイメージを如何に正確に描けるか、が重要ですね。
OpenGLのテクスチャを使っているので、拡大縮小はGPUまかせ。といっても負荷制御なし(FPS制限なし)にするとCPUパワー全部使ってしまいます。
今のところの問題は、この拡大縮小をしたときに限って、VHScrCapのdemoモード炸裂で横線が入ってしまいます><
拡大縮小しなければOK。
次のステップとして
(1) この子画面上でのマウス操作/キーボード操作をclient.exeに送りつける
(2) 通常画面と子画面(とuoclistのダイアログ)の位置のスワップ
でひとまずの完成を予定しますが、(2)を様々な条件に対応させるのは難儀だろうな。。。
この辺ができれば、2垢のみならず1垢であっても子画面で操作できて便利になると考えてます。画面サイズを大きくしたいっていうニーズはよく聞きますが、ウィンドウサイズを縮小ってのも欲しいよね。
画像のキャプチャについては、ここまでできたところで自動的にできているようなもの。(面倒だから無圧縮bmpでいいよね^^;;;)
動画キャプチャについても、フォーマットについて何も考えなければ(無圧縮avi ^^;;;)できたも同然なのですが、そもそも(自分にとって)需要があるか?という疑問があるので当分は手をつけない予定。
とここまでやってみて、これらの技術、5年前には完成していたんですよね。めんどくさそうだから手を付けなかっただけで。今これに手を付けている=新パブ入ってもやり込むほどの魅力がなかった、ってことだったり。。。
2013年9月25日水曜日
videoInput
カメラ画像をウィンドウ表示させるのに、むかーしvideoInput使ったなぁ、と昔作ったサンプルを探し出してきました。
ががが、ソースからビルドするとVHScrCapとの組み合わせで、なぜか最初の1フレームだけ表示して止まってしまう><
一緒にバイナリが残っていたので、そっちを実行するとちゃんと動画表示するし。。。
残念なことに、その動作するバージョンをビルドしたときのvideoInputのソースコード、失くしました。とういうか、ハードディスクがクラッシュしたことがあって、消えちゃったんですね。
どこかいじった記憶があるのですが思い出せません。どこをどういじっても、なぜか1フレーム目で止まる。
しかたないので、videoInputはOpenCVに統合されたっけ?とOpenCVのカメラチャプチャのサンプルをビルドしてみたら、、、
う ご い た
うーん、なにがいけないんだろ。
追記:
どうやら、昔もOpenCVからvideoInputを引っ張ってきたようだな、こりゃ。
videoInputのソースが残ってない、ってのはそういうことなんだろうと思う。(videoInputのソースをいじった記憶もあるんだけどね)
追記:
どうやら、昔もOpenCVからvideoInputを引っ張ってきたようだな、こりゃ。
videoInputのソースが残ってない、ってのはそういうことなんだろうと思う。(videoInputのソースをいじった記憶もあるんだけどね)
2013年9月18日水曜日
仮想ディスプレイドライバ
調べてみたらあるじゃん^^
ジャンル的には仮想ディスプレイドライバ、っていうのか。
ちょっと検索するとZoneScreenがひっかかったので試用してみたけど、プロパティを見るとちゃんとモニタが増えますね^^
こんなのはどう???
(1) プライマリモニタに1個目のUOを表示
(2) 2個目のUOを起動して、仮想ディスプレイドライバで増やしたセカンダリ(サード、…)モニタに表示
(3) 2個目のUOのゲーム画面をキャプチャして、プライマリ画面にウィンドウ表示(縮小して表示)
(4) (3)のウィンドウをプライマリモニタ上でアクティブにすると、マウス操作、キーボード操作を(2)の2個目のUOに送りつける
要するに、2垢で起動したときに2垢目のUOへの画面切り替え、操作をいかにして楽にするかってことです。
僕の環境だと、1モニタでやっているので、どうしても切り替えが面倒。マクロがそれなりに機能すると、2垢目のUOへの操作はラフで構わないんだよなぁ。
ということで、まずは目的にぴったり合いそうな仮想ディスプレイドライバをまずは探してみます。
追記:
ごめんなさい。眠気でボケていたようです。
なにもグラボのアクセラレータが効かない仮想ディスプレイドライバでやる必要はなく、
デスクトップPCならセカンダリモニタが普通に使えるので、
「1つのモニタに2つのモニタ出力を接続すればよい」
だけのことですね。ノートだと厳しいので仮想ディスプレイドライバを使うしかないですが。
モニタに複数の入力端子があったことをすっかり忘れてました^^;;;
ジャンル的には仮想ディスプレイドライバ、っていうのか。
ちょっと検索するとZoneScreenがひっかかったので試用してみたけど、プロパティを見るとちゃんとモニタが増えますね^^
こんなのはどう???
(1) プライマリモニタに1個目のUOを表示
(2) 2個目のUOを起動して、
(3) 2個目のUOのゲーム画面をキャプチャして、プライマリ画面にウィンドウ表示(縮小して表示)
(4) (3)のウィンドウをプライマリモニタ上でアクティブにすると、マウス操作、キーボード操作を(2)の2個目のUOに送りつける
要するに、2垢で起動したときに2垢目のUOへの画面切り替え、操作をいかにして楽にするかってことです。
僕の環境だと、1モニタでやっているので、どうしても切り替えが面倒。マクロがそれなりに機能すると、2垢目のUOへの操作はラフで構わないんだよなぁ。
ということで、まずは目的にぴったり合いそうな仮想ディスプレイドライバをまずは探してみます。
追記:
ごめんなさい。眠気でボケていたようです。
なにもグラボのアクセラレータが効かない仮想ディスプレイドライバでやる必要はなく、
デスクトップPCならセカンダリモニタが普通に使えるので、
「1つのモニタに2つのモニタ出力を接続すればよい」
だけのことですね。ノートだと厳しいので仮想ディスプレイドライバを使うしかないですが。
モニタに複数の入力端子があったことをすっかり忘れてました^^;;;
Windows7ネイティブモード
前々から気になっていたのですが、uoclistをWindows7(32bit/64bit)で動かすとどういうことが起きるか、やってみました。(VirtualBoxを使用)
(1) とりあえず動く?
(2) ウィンドウがちらつく(描画処理関係がXPと違う)
(3) フォント指定をしない場合、デフォルトのメイリオを使ってしまってウィンドウサイズがでかくなる
(4) 64bitの場合、CreateProcess()で起動したプロセス(client.exe)を終了させることができない
仕事ではWin7を使ってますが、Win7のUIはどうも好きになれないなぁ。XPのLuna好きだし。
もうひとつ、気になっていたのが、Windows7ネイティブモードでの起動。manifestをちょっといじってみたのですが、Vistaモードでしか動かない><
client.exeもVistaモードでの実行ですね。
で、本題の調査は、VirtualBox等を使っての仮想OS上UO起動に僕のPCがどれだけ耐えれるか。
結果、僕のPCじゃ無理><
クライアントを多重起動したほうがやっぱりパフォーマンスがいいわ。
仮想OSでなくて汎用的に使える仮想モニタってあるのか、調べてみたい。
仕組み的には仮想モニタのデバイスドライバを作成すればいいだけだと思うんだけど。
(1) とりあえず動く?
(2) ウィンドウがちらつく(描画処理関係がXPと違う)
(3) フォント指定をしない場合、デフォルトのメイリオを使ってしまってウィンドウサイズがでかくなる
(4) 64bitの場合、CreateProcess()で起動したプロセス(client.exe)を終了させることができない
仕事ではWin7を使ってますが、Win7のUIはどうも好きになれないなぁ。XPのLuna好きだし。
もうひとつ、気になっていたのが、Windows7ネイティブモードでの起動。manifestをちょっといじってみたのですが、Vistaモードでしか動かない><
client.exeもVistaモードでの実行ですね。
で、本題の調査は、VirtualBox等を使っての仮想OS上UO起動に僕のPCがどれだけ耐えれるか。
結果、僕のPCじゃ無理><
クライアントを多重起動したほうがやっぱりパフォーマンスがいいわ。
仮想OSでなくて汎用的に使える仮想モニタってあるのか、調べてみたい。
仕組み的には仮想モニタのデバイスドライバを作成すればいいだけだと思うんだけど。
2013年9月14日土曜日
UOキャプチャ動画の作成方法
UOの画面をキャプチャして動画を作成する方法ですが、
僕が休止する前(4,5年くらい前)での僕的決定版が以下の方法です。
(1) Hmelyoff LabsのVHScrCap(DirectXフィルタ)をインストールする
(2) VHScrCapのキャプチャ位置を設定する
(3) おまけとしてついてくる動画保存ソフト、もしくは(DirectXフィルタなのだから)KmPlayerやVirtualDubで保存する
当時の話なのでWindowsXP(32bit)での動作なのですが、僕の持っているノートPC(core2duo 2GHz, 2Gメモリ, オンメモリ(?)のグラボ, WindowsXP)でキャプチャして作成した動画(無圧縮)のアップロード例を添付します。(アップロード時にだいぶ圧縮されちゃっています)
こちら
PC環境、Youtubeでのデータフローを考えて圧縮をいれないと、きれいな画質でアップロードできませんね、むしろそっちが重要なファクターということですか。
この方法ですが、WindowsVistaからGDI周りの実装が変更されたので、今どきのPCでのベストな方法なのかはよくわかりません。
で、VHScrCapとかは全部ソース付きで公開されていたので、UO専用にしたてることもできます。Hmelyoff Labs(たしかロシアの会社)、今はWebにまともにアクセスできないのですがどうしちゃったんでしょう><
以上、Razorのような動画キャプチャ機能、RPVでなくてもよければ追加するのは難しくないよね、って言いたかっただけですw
僕が休止する前(4,5年くらい前)での僕的決定版が以下の方法です。
(1) Hmelyoff LabsのVHScrCap(DirectXフィルタ)をインストールする
(2) VHScrCapのキャプチャ位置を設定する
(3) おまけとしてついてくる動画保存ソフト、もしくは(DirectXフィルタなのだから)KmPlayerやVirtualDubで保存する
当時の話なのでWindowsXP(32bit)での動作なのですが、僕の持っているノートPC(core2duo 2GHz, 2Gメモリ, オンメモリ(?)のグラボ, WindowsXP)でキャプチャして作成した動画(無圧縮)のアップロード例を添付します。(アップロード時にだいぶ圧縮されちゃっています)
こちら
PC環境、Youtubeでのデータフローを考えて圧縮をいれないと、きれいな画質でアップロードできませんね、むしろそっちが重要なファクターということですか。
この方法ですが、WindowsVistaからGDI周りの実装が変更されたので、今どきのPCでのベストな方法なのかはよくわかりません。
で、VHScrCapとかは全部ソース付きで公開されていたので、UO専用にしたてることもできます。Hmelyoff Labs(たしかロシアの会社)、今はWebにまともにアクセスできないのですがどうしちゃったんでしょう><
以上、Razorのような動画キャプチャ機能、RPVでなくてもよければ追加するのは難しくないよね、って言いたかっただけですw
ラベル:
プログラミング
2013年9月12日木曜日
JST -> ???
BOTを回していて、公表されている海外シャードのメンテ時間とその日本標準時の情報にズレがあることに気づきました。
要するに、サマータイムでずれているんですね><
なので、JSTを海外シャードの現地時間に直すコードを書きたくなったのですが、これがまた面倒そう。。。
→いつからいつまでが夏時間なのかを知る必要がある
→夏時間は年ごとに違う場合がある(DynamicDST)
→WindowsUpdateを適用していればWindowsがレジストリに保持する夏時間情報が更新される(?)
→SetTimeZoneInformation()/GetTimeZoneInformation()を使え
→SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZonesの下のTZIを構造体にぶち込め
ということみたいで、単純に略称の英字3文字を入力として変換できるようなものではないようです><
要するに、サマータイムでずれているんですね><
なので、JSTを海外シャードの現地時間に直すコードを書きたくなったのですが、これがまた面倒そう。。。
→いつからいつまでが夏時間なのかを知る必要がある
→夏時間は年ごとに違う場合がある(DynamicDST)
→WindowsUpdateを適用していればWindowsがレジストリに保持する夏時間情報が更新される(?)
→SetTimeZoneInformation()/GetTimeZoneInformation()を使え
→SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZonesの下のTZIを構造体にぶち込め
ということみたいで、単純に略称の英字3文字を入力として変換できるようなものではないようです><
登録:
投稿 (Atom)

