2016/07/19

Change Display with Audio output (HDTV) Easily

Changing a display is usually an easy task for normal PC user, but what about casual user or children? Also same thing with Audio Output.

I'm using a PC with a 22" inch display and it's also connected to 40" inch LED TV (as a second/Extended) Display.

Usually I let my son play PC games on the TV, so I have to change the display to TV as primary/main Display as well as audio output I have to set it to HDMI Audio, and once he finished playing I have to return it back to the PC Display.

So I thought of doing that in command prompt but unfortunately I couldn't able to do so neither for monitor/display or audio, so of course googled that where I found interesting apps that can change the Audio or the Display but not both, so I filled the gap with autoit along the Apps Display Changer II and AudioEndPointController. And here is how:

1 - Changing Audio Playback by Code/Command Prompt

 First change Audio Playback device, which is easy for non hdmi cause HDMI -for some reason- its name/number can be changed by the OS (Windows) where it can be LG TV-4 (NVIDIA High Definition Audio) or LG-SBAR-3 (NVIDIA High Definition Audio) etc ..
And All refer to the same HDMI Port where the common name is NVIDIA High Definition Audio, where this is solved using the open source app AudioEndPointController which returns list of audio device followed by a number like
Audio Device 0: LG-SBAR-4 (NVIDIA High Definition Audio)
Audio Device 1: Speakers (2- High Definition Audio Device)
Audio Device 2: Digital Audio (S/PDIF) (2- High Definition Audio Device)
So to make it dynamic with HDMI output we use the following code:
ChangeAudio.au3
#include Constants.au3
#include StringConstants.au3

Dim $syspath = "E:\MyApps\AudioEndPointController\Release\EndPointController.exe"

$DirCmd = Run(@ComSpec & " /c "&$syspath, "C:\", @SW_HIDE, $STDOUT_CHILD+$STDERR_CHILD)
Local $ResponseText
While 1
    $ResponseText &= StdoutRead($DirCmd)
    If @error Then ExitLoop
Wend

Local $NvidiaHDMI = StringRegExp($ResponseText, '.*?NVIDIA', $STR_REGEXPARRAYGLOBALMATCH)
if UBound($NvidiaHDMI) >= 1 Then
    $playbackID = StringRegExp($NvidiaHDMI[0], '\d+:', $STR_REGEXPARRAYGLOBALMATCH)
    $playbackID = StringReplace($playbackID[0],":","")
    $DirCmd = Run(@ComSpec & " /c "&$syspath& ' '& $playbackID, "C:\", @SW_HIDE, $STDOUT_CHILD+$STDERR_CHILD)
EndIf
and compile this script and name it HDMI_AudioPlayback.exe

2 - Changing the Primary Display by Code/Command Prompt

 Now we use Display Changer to get the settings for the primary display where you want to change later. the beauty of the Display Changer that it can directly get the current properties/settings of the display connected and save it to xml format (with -create option like E:\DC\dc2.exe -create="tv.xml" check examples here)

3 - Putting things together

The final code needed to change the display And Audio can be as the following:
PlayOnTV.bat
cd "E:\DC"
e:
E:\DC\dc2.exe -configure="tv.xml"
E:\MyApps\HDMI_AudioPlayback.exe
Once you want to change back the primary display to the PC:
ReturnDesktop.bat
cd "E:\MyApps\DC"
e:
E:\MyApps\DC\dc2.exe -configure="table.xml"

Links:
Autoit Sript (v3)
Display Changer II App
AudioEndPointController (GitHub)

2013/04/17

أجهزة الRange Extenders و حلول مناسبة

مع انتشار الهواتف الذكية و أهمية الانترنت للجيل الحالي من أجهزة ألعاب الفيديو (XBox360 و PS3 و WiiU) بات من الضروري توفير السرعة المناسبة و التغطية الكافية للشبكة اللاسلكية.
لدي جهاز راوتر واحد في البيت و إشارة الوايرلس لم تكن لتغطي النصف الثاني من البيت، فحاولت تقوية الإشارة بأجهزة الrange extenders (مجازًا سأسميه المقوّي) القديمة لدي فلم تنجح محاولاتي لسبب لم أعرفه إلا للتو، و هي خاصية الWPS-Wifi Protected Setup الموجودة في الأجهزة الجديدة و ذلك لسهولة و ضمان الشبك بين الراوتر و المقوّي.
خطوات التثبيت كانت جدا مباشرة و بسيطة و تشبه كثيرا عملية الربط Pairing بين أجهزة البلوتوث Bluetooth.
 في السنوات القليلة السابقة كان هناك بطء ملحوظ عند استخدام المقوّي، أما الآن فقد اندهشت لأدائه و سرعته إذ لم أحس باني متصل بالمقوّي أم من الراوتر مباشرة، حتى عند اللعب online في لعبة Call of Duty - Black Ops 2 فالأداء كان جدا طيب.

الخلاصة .. أجهزة الRange Extender مفيدة و أداؤها الآن جدا طيب و أسعارها معقولة (حتى كتابة هذا الموضوع تتراوح الأسعار ما بين 12 إلى 20 دينار كويتي)

*مصدر الصورة من موقع www.netgear.com

2012/09/30

مصدر - مدينة المستقبل


 منذ فترة قرأت عن مشروع مدينة مصدر، و هو باختصار مدينة متكاملة الخدمات يتم تزويد الطاقة فيها عن طريق الطاقة المتجددة (الطاقة الشمسية و الرياح)، أما الآن فهم على قدم و ساق لإتمامه في الوقت المحدد.
فقد ذكر موقع cleanTechnica بعض من أخباره في السابق و مؤخرا تم وضع فيديو من برنامج بريطاني يشرح حاليا ماذا يدور حول هذا المشروع، الذي الخصه لكم بالآتي:
  1. القسم الأول من المشروع بدأ سنة 2006 و ينتهي 2015 أما المشروع ككل فسينتهي 2025
  2. من أهم الأشياء في المشروع أنه تم إنشاء مركز أبحاث لدراسة و تطوير تقنيات الطاقة البديلة/المتجددة و تطبيقها في نفس المشروع و متابعتها و من ثم تسويقها اذا نجحت!
  3. بالنسبة للعمر الافتراضي للخلايا الشمسية و هو 20-25 سنة مركز أبحاث مصدر سيتحقق من ذلك من خلال تجاربهم لذلك و التي حتى الآن تشير انها من الممكن ان تعطي عمرا أطول!
  4. و عن مواد البناء المستهلكة فسيعيدون تدويرها و إعادة استخدامها للبناء في نفس المشروع.
  5. أما عن التبريد، فمدينة مصدر تقل 10 درجات عن العاصمة "أبو ظبي" بسبب هندسة البناء و تقنيات التبريد المستخدمة.
وصلة الفيديو: http://youtu.be/NIaz61zpLfs

2011/12/05

Get Any Cell Value from a selected row/cell In .NET

Sometimes in your application you need to do a very simple thing like selecting a row in a datagrid to get a cell value, but in .NET's DataGridView will highlight the cell when you click on it and not the row or column.

So why do you have to select a whole row to get a value, or why do you have to select the exact cell i want?
there is a very simple code that accepts any selected cell/row to get your needed cell in that row - check the image:
as you can see I clicked on "Mataderos 2312" cell and got the result "ANTON" which is the value I want, without the need of selecting the whole row or selecting the exact cell needed, just any cell in that row.
code:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim str As String = DataGridView1.Rows(DataGridView1.SelectedCells.Item(0).RowIndex).Cells(0).Value
TextBox1.Text = str
End Sub


code description:
to get the selected item:
DataGridView1.SelectedCells.Item(0).Value
to get it's row index
DataGridView1.SelectedCells.Item(0).RowIndex
to get a cell for it's row
DataGridView1.Rows(DataGridView1.SelectedCells.Item(0).RowIndex).Cells(0).Value

Programming your own Speech Recognition

Speech Recognition
I have a task to develop our own dictionary in windows Speech Recognition (in Windows7), which recogize only our words without having/using the normal (conversation) words that are used in Windows' Dictionary.
and when i was developing that, i did added my own words (as this helpful example), but still the program accepts all kind of words, and i don't want that.
While (hard) searching throught the net, it appeared that this is not possible to have my own dictionary as one said the following:

The shared recogniser which turns on the Windows command recognition grammar. and You can't avoid it, this is disappointing and frustrating. The solution is the second option, creating your own recogniser.
You do not need to turn on the Windows Speech recognition, instead you end up with your own recognition engine, completely independant of the Windows command recogniser.
This MSDN guide is for using WAV -> SR, but most of it applies:
http://msdn.microsoft.com/en-us/library/ms717071%28VS.85%29.aspx
Replace the Stream object wit han spAudio object and you're almost there, here's the Audio Object Code(shortened, no HRESULT checks):
CComPtr pAudioToken;
CComPtr pAudio;

// Try the default
hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &pAudioToken);


// Connect the Device
hr = pRecognizerEngine->SetInput(pAudioToken, TRUE);

hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &pAudio);
hr = pRecognizerEngine->SetInput(pAudio, TRUE);

After that you can continue using the MSDN link above, and will be almost finished, except you need to manually activate the Audio Stram from a microphone / Line-In:
hr = pGrammar->SetGrammarState(SPGS_ENABLED);
hr = pNavGrammar->SetDictationState(SPRS_ACTIVE);
Assuming you are careful in checking the errors, you'll have your own voice recognition, and NO windows commands going off!

Links:
  1. Windows Speech Recognition: How to Benefin from its Advanced Configuration Options
  2. Grammar Format Tags - to create your own grammar (dictionary) as this solitaire example
  3. How to disable windows 7 speech recognition COMMANDS

2011/08/17

Blogger's Template Designer


لطالما كنت أفكر بتحويل هذه المدونة من Blogger إلى Wordpress و أحد الأسباب هو التصاميم البسيطة + قلة/فقر الplugins الموجودة.
لكن بعد زيارتي للوحة التحكم اليوم تغير رأيي حول Blogger إذ أتوقع لها الصمود و ذلك بسبب التحديثات الجديدة مثل الTemplate Designer فهذه تعتبر ميزة جدا قوية له، لن أطيل الشرح أكثر و لكن ادخلوها و اكتشفوها ;)

2011/02/08

لماذا يا كاسبرسكي


اشتريت مؤخرا Wireless USB Adapter و بعدما وصلته على جهازي ذا الويندوز 7 تعرف عليه لكن ظهر أمام الwireless connection أنه Disabled فحاولت تغيير الdriver له عدة مرات، و أيضا جربت Adapter آخر و كل محاولاتي باءت بالفشل!، إلى أن ذهبت إلى خصائص هذا الConnection فوجدت خيار للKaspersky NDIS Filter* فأزلت العلامة منه ثم اشتغل!
إذا كان هذا الخيار يتسبب بعدم تشغيل قطعة الwireless فلماذا هو موجود >_<

*مصدر الصورة و معلومات عنها من هنا